Commit f63dc191898f2fc4e99266755bd868369e513933
1 parent
520ae6bd
added preliminary English version + filter forms fixes/updates
Showing
16 changed files
with
1167 additions
and
338 deletions
common/static/common/js/init.js
0 → 100644
common/templates/base.html
1 | 1 | <!doctype html> |
2 | 2 | |
3 | +{% load i18n %} | |
3 | 4 | {% load static %} |
4 | 5 | |
5 | -<html lang="pl"> | |
6 | +{% get_current_language as LANGUAGE_CODE %} | |
7 | + | |
8 | +<html lang="{{ LANGUAGE_CODE }}"> | |
6 | 9 | <head> |
7 | 10 | <meta charset="utf-8"> |
8 | 11 | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
... | ... | @@ -15,8 +18,11 @@ |
15 | 18 | <!--might be needed for resizeable panels, causes errors if included after Popper--> |
16 | 19 | <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> |
17 | 20 | <!--Bootstrap’s tooltips require Popper--> |
18 | - <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> | |
19 | - <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> | |
21 | + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> | |
22 | + <script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> | |
23 | + <script type="text/javascript" src="{% static 'common/js/init.js' %}"></script> | |
24 | + <!-- translations: https://docs.djangoproject.com/en/2.2/topics/i18n/translation/#using-the-javascript-translation-catalog --> | |
25 | + <script type="text/javascript" src="{% url 'javascript-catalog' %}"></script> | |
20 | 26 | {% block scripts %}{% endblock %} |
21 | 27 | </head> |
22 | 28 | |
... | ... | @@ -33,22 +39,22 @@ |
33 | 39 | <ul class="navbar-nav mr-auto"> |
34 | 40 | <li class="nav-item" id="nav-entries"> |
35 | 41 | <a class="nav-link" href="{% url 'entries:entries' %}"> |
36 | - Hasła | |
42 | + {% trans "Hasła" %} | |
37 | 43 | </a> |
38 | 44 | </li> |
39 | 45 | <li class="nav-item" id="nav-phrases"> |
40 | 46 | <a class="nav-link" href="{% url 'phrase_expansions:phrase_expansions' %}"> |
41 | - Typy fraz | |
47 | + {% trans "Typy fraz" %} | |
42 | 48 | </a> |
43 | 49 | </li> |
44 | 50 | <li class="nav-item" id="nav-stats"> |
45 | 51 | <a class="nav-link" href="{% url 'dictionary_statistics:dictionary_statistics' %}"> |
46 | - Statystyki | |
52 | + {% trans "Statystyki" %} | |
47 | 53 | </a> |
48 | 54 | </li> |
49 | 55 | <li class="nav-item" id="nav-download"> |
50 | 56 | <a class="nav-link" href="{% url 'download:download' %}"> |
51 | - Pobierz słownik | |
57 | + {% trans "Pobierz słownik" %} | |
52 | 58 | </a> |
53 | 59 | </li> |
54 | 60 | <li class="nav-item" id="nav-test"> |
... | ... | @@ -63,6 +69,12 @@ |
63 | 69 | </li> |
64 | 70 | </ul> |
65 | 71 | </div> |
72 | + <a | |
73 | + class="btn btn-sm btn-outline-light" | |
74 | + href="{% if LANGUAGE_CODE == "pl" %}/en{% else %}/pl{% endif %}{{ request.path|slice:"3:" }}" | |
75 | + > | |
76 | + <b>{% trans "EN" %}</b> | |
77 | + </a> | |
66 | 78 | </nav> |
67 | 79 | |
68 | 80 | <main class="container-fluid flex-grow-1 overflow-auto" role="main"> |
... | ... |
compile_translations.sh
0 → 100755
1 | +django-admin compilemessages | |
... | ... |
entries/form_fields/specialised_fields.py
... | ... | @@ -2,6 +2,8 @@ from django import forms |
2 | 2 | |
3 | 3 | from django.db.models import Q |
4 | 4 | |
5 | +from django.utils.translation import gettext_lazy as _ | |
6 | + | |
5 | 7 | from syntax.models_phrase import PhraseTypeModel |
6 | 8 | |
7 | 9 | from semantics.models import ( |
... | ... | @@ -31,7 +33,7 @@ class PhraseTypeFilter(ModelChoiceFilter): |
31 | 33 | def __init__(self, lex=False, **kwargs): |
32 | 34 | |
33 | 35 | super().__init__( |
34 | - label=('Typ frazeologizmu' if lex else 'Typ frazy'), | |
36 | + label=(_('Typ frazeologizmu') if lex else _('Typ frazy')), | |
35 | 37 | queryset=PhraseTypeModel.objects.filter(main_phrase_types__lex_phrases__isnull=(not lex)).distinct(), |
36 | 38 | key='name', |
37 | 39 | #lookup='phrase_types__main_type', |
... | ... | @@ -39,12 +41,12 @@ class PhraseTypeFilter(ModelChoiceFilter): |
39 | 41 | lookup=DUMMY_LOOKUP, |
40 | 42 | # we will want to identify the selected phrase type by name later |
41 | 43 | to_field_name='name', |
42 | - empty_label='wybierz', | |
44 | + empty_label=_('wybierz'), | |
43 | 45 | **kwargs, |
44 | 46 | ) |
45 | 47 | def label_from_instance(self, obj): |
46 | 48 | pt = obj.name |
47 | - return '{} ({})'.format(pt, PHRASE_TYPE.get(pt, '...')) | |
49 | + return '{} ({})'.format(pt, PHRASE_TYPE().get(pt, '...')) | |
48 | 50 | |
49 | 51 | ''' |
50 | 52 | class ArgumentFilter(ComboFilter): |
... | ... | @@ -162,8 +164,8 @@ class PhraseoFilter(forms.ChoiceField, RadiosLayoutField): |
162 | 164 | |
163 | 165 | def __init__(self): |
164 | 166 | super().__init__( |
165 | - label='Frazeologia', | |
166 | - choices=(('2', 'dowolnie'), ('1', 'zawiera'), ('0', 'nie zawiera')), | |
167 | + label=_('Frazeologia'), | |
168 | + choices=(('2', _('dowolnie')), ('1', _('zawiera')), ('0', _('nie zawiera'))), | |
167 | 169 | initial='2', |
168 | 170 | required=False, |
169 | 171 | ) |
... | ... |
entries/forms.py
... | ... | @@ -4,6 +4,10 @@ from django import forms |
4 | 4 | |
5 | 5 | from django.db.models import OneToOneField, ForeignKey, CharField, ManyToManyField, Q |
6 | 6 | |
7 | +from django.utils.translation import gettext_lazy as _ | |
8 | + | |
9 | +from django.utils import translation | |
10 | + | |
7 | 11 | from crispy_forms.helper import FormHelper |
8 | 12 | import crispy_forms.bootstrap as bootstrap |
9 | 13 | import crispy_forms.layout as layout |
... | ... | @@ -45,6 +49,17 @@ from importer.PhraseAttributes import attrs_helpers |
45 | 49 | |
46 | 50 | from . import polish_strings |
47 | 51 | |
52 | +''' | |
53 | +from django.utils import translation | |
54 | +from django.utils.translation import gettext_lazy as _ | |
55 | + | |
56 | +def _(x): | |
57 | + print(translation.get_language()) | |
58 | + print('***************', x) | |
59 | + y = gettext_lazy(x) | |
60 | + print('*************', y) | |
61 | + return y | |
62 | + ''' | |
48 | 63 | |
49 | 64 | class QueryForm(forms.Form): |
50 | 65 | |
... | ... | @@ -82,24 +97,23 @@ class QueryForm(forms.Form): |
82 | 97 | field_object = cls.base_fields[field_name] |
83 | 98 | return field_object.layout(field_name) |
84 | 99 | |
85 | -def or_button(button_label): | |
86 | - return bootstrap.StrictButton('+ Lub ({})'.format(button_label), css_class='or-button btn-sm btn-info') | |
100 | +def or_button(button_label, add_button_id): | |
101 | + return bootstrap.StrictButton('+ {} ({})'.format(_('Lub'), button_label), css_class='or-button btn-sm btn-info', data_add_id=add_button_id) | |
87 | 102 | |
88 | 103 | def remove_button(label): |
89 | 104 | return bootstrap.StrictButton(label, css_class='remove-button btn-sm btn-warning') |
90 | 105 | |
91 | -def and_or_form_creator(button_label, field_name=None, data_add=None, *args, **kwargs): | |
106 | +def and_or_form_creator(button_label, button_id, field_name=None, data_add=None, *args, **kwargs): | |
92 | 107 | add_button = None |
93 | 108 | data_add = 'switch' if data_add is None else data_add |
94 | 109 | if field_name is not None: |
95 | - add_button = bootstrap.FieldWithButtons(field_name, bootstrap.StrictButton('+ Dodaj', css_class='add-button btn-sm btn-success', data_add=data_add, *args, **kwargs)) | |
110 | + add_button = bootstrap.FieldWithButtons(field_name, bootstrap.StrictButton('+ {}'.format('Add'), css_id=button_id, css_class='add-button btn-sm btn-success', data_add=data_add, *args, **kwargs)) | |
96 | 111 | else: |
97 | - add_button = bootstrap.StrictButton('+ {}'.format(button_label), css_class='add-button btn-sm btn-success', data_add=data_add, *args, **kwargs) | |
112 | + add_button = bootstrap.StrictButton('+ {}'.format(button_label), css_id=button_id, css_class='add-button btn-sm btn-success', data_add=data_add, *args, **kwargs) | |
98 | 113 | return [ |
99 | - #layout.HTML('<div class="and-or-forms py-1 pl-1 mb-1 border-top border-bottom border-danger" data-formtype="{}">'.format(data_add)), | |
100 | 114 | layout.HTML('<div class="and-or-forms py-1 pl-1" data-formtype="{}">'.format(data_add)), |
101 | 115 | add_button, |
102 | - or_button(button_label), | |
116 | + or_button(button_label, button_id), | |
103 | 117 | layout.HTML('</div>'), |
104 | 118 | ] |
105 | 119 | |
... | ... | @@ -124,41 +138,41 @@ class EntryForm(QueryForm): |
124 | 138 | schema_components = [ |
125 | 139 | self.make_field('num_schemata'), |
126 | 140 | ] + \ |
127 | - and_or_form_creator('Schemat', data_add='schema') + \ | |
141 | + and_or_form_creator(_('Schemat'), 'add-schema-0', data_add='schema') + \ | |
128 | 142 | [ |
129 | 143 | self.make_field('filter_schemata'), |
130 | 144 | ] + \ |
131 | - and_or_form_creator('Fraza', field_name='phrase_type', data_prefix='phrase_') | |
145 | + and_or_form_creator(_('Fraza'), 'add-phrase-0', field_name='phrase_type', data_prefix='phrase_') | |
132 | 146 | |
133 | 147 | frame_components = [ |
134 | 148 | self.make_field('num_frames'), |
135 | 149 | ] + \ |
136 | - and_or_form_creator('Rama', data_add='frame') + \ | |
150 | + and_or_form_creator(_('Rama'), 'add-frame-0', data_add='frame') + \ | |
137 | 151 | [ |
138 | 152 | self.make_field('filter_frames'), |
139 | 153 | ] |
140 | 154 | |
141 | 155 | components = [ |
142 | - #layout.Fieldset('Własności haseł', *entry_components), | |
143 | - layout.Fieldset('Własności składniowe', *schema_components), | |
144 | - layout.Fieldset('Własności semantyczne', *frame_components), | |
145 | - layout.Submit('main-submit', 'Filtruj'), | |
146 | - layout.Reset('main-reset', 'Wyczyść'), | |
156 | + layout.Fieldset(_('Własności hasła'), *entry_components), | |
157 | + layout.Fieldset(_('Własności składniowe'), *schema_components), | |
158 | + layout.Fieldset(_('Własności semantyczne'), *frame_components), | |
159 | + layout.Submit('main-submit', _('Filtruj')), | |
160 | + layout.Reset('main-reset', _('Wyczyść')), | |
147 | 161 | ] |
148 | 162 | |
149 | 163 | self.helper.layout = layout.Layout(*components) |
150 | 164 | |
151 | 165 | lemma = RegexFilter( |
152 | - label='Lemat', | |
166 | + label=_('Lemat'), | |
153 | 167 | lookup='name', |
154 | 168 | max_length=200, |
155 | 169 | autocomplete='lemma', |
156 | 170 | ) |
157 | 171 | pos = ModelMultipleChoiceFilter( |
158 | - label='Część mowy', | |
172 | + label=_('Część mowy'), | |
159 | 173 | queryset=POS.objects.exclude(tag='unk'), |
160 | 174 | key='tag', |
161 | - human_values=polish_strings.POS, | |
175 | + human_values=polish_strings.POS(), | |
162 | 176 | lookup='pos', |
163 | 177 | ) |
164 | 178 | phraseology = PhraseoFilter() |
... | ... | @@ -169,16 +183,16 @@ class EntryForm(QueryForm): |
169 | 183 | lookup='status', |
170 | 184 | ) |
171 | 185 | num_schemata = RangeFilter( |
172 | - label='Liczba schematów', | |
186 | + label=_('Liczba schematów'), | |
173 | 187 | lookup='schemata_count', |
174 | 188 | ) |
175 | 189 | num_frames = RangeFilter( |
176 | - label='Liczba ram', | |
190 | + label=_('Liczba ram'), | |
177 | 191 | lookup='frames_count', |
178 | 192 | ) |
179 | - phrase_type = PhraseTypeFilter(help_text='Typ frazy występujący w haśle.') | |
180 | - filter_schemata = SwitchField('Ukryj niepasujące schematy') | |
181 | - filter_frames = SwitchField('Ukryj niepasujące ramy') | |
193 | + phrase_type = PhraseTypeFilter(help_text=_('Typ frazy występujący w haśle.')) | |
194 | + filter_schemata = SwitchField(_('Ukryj niepasujące schematy')) | |
195 | + filter_frames = SwitchField(_('Ukryj niepasujące ramy')) | |
182 | 196 | |
183 | 197 | @staticmethod |
184 | 198 | def get_child_form_prefix(child_form): |
... | ... | @@ -217,7 +231,7 @@ class FormFactory(object): |
217 | 231 | @staticmethod |
218 | 232 | def make_layout(title, components): |
219 | 233 | return layout.Layout(layout.Fieldset( |
220 | - '{} <span class="collapsed-info"></span> <button class="btn collapse-button btn-sm btn-secondary" data-collapsed="false" type="button">zwiń</button><button class="btn remove-button btn-sm btn-warning" type="button">Usuń</button>'.format(title), | |
234 | + '{} <span class="collapsed-info"></span> <button class="btn collapse-button btn-sm btn-secondary" data-collapsed="false" type="button">{}</button><button class="btn remove-button btn-sm btn-warning" type="button">{}</button>'.format(title, _('Zwiń'), _('Usuń')), | |
221 | 235 | *components |
222 | 236 | )) |
223 | 237 | |
... | ... | @@ -252,7 +266,7 @@ class FormFactory(object): |
252 | 266 | 'get_child_form_prefix' : lambda self, child_form: cls.get_child_form_prefix(child_form), |
253 | 267 | }) |
254 | 268 | |
255 | - form_class.base_fields[cls.unique_name('negated', unique_number)] = SwitchField('Zaneguj', css_class='negate-switch') | |
269 | + form_class.base_fields[cls.unique_name('negated', unique_number)] = SwitchField(_('Zaneguj'), css_class='negate-switch') | |
256 | 270 | for field_name, field_maker, layout_maker in cls.field_makers: |
257 | 271 | if field_name is not None: |
258 | 272 | form_class.base_fields[FormFactory.unique_name(field_name, unique_number)] = field_maker() |
... | ... | @@ -266,16 +280,16 @@ class SchemaFormFactory(FormFactory): |
266 | 280 | form_class_name = 'SchemaForm' |
267 | 281 | form_model = Schema |
268 | 282 | form_formtype = 'schema' |
269 | - form_header = 'Schemat składniowy' | |
283 | + form_header = _('Schemat składniowy') | |
270 | 284 | |
271 | 285 | field_makers = ( |
272 | 286 | ( |
273 | 287 | 'opinion', |
274 | 288 | lambda: ModelMultipleChoiceFilter( |
275 | - label='Opinia o schemacie', | |
289 | + label=_('Opinia o schemacie'), | |
276 | 290 | queryset=SchemaOpinion.objects.filter(schemata__isnull=False).distinct(), |
277 | 291 | key='key', |
278 | - human_values=polish_strings.SCHEMA_OPINION, | |
292 | + human_values=polish_strings.SCHEMA_OPINION(), | |
279 | 293 | lookup='opinion', |
280 | 294 | #initial=SchemaOpinion.objects.filter(key__in=('col', 'vul')), |
281 | 295 | ), |
... | ... | @@ -284,8 +298,8 @@ class SchemaFormFactory(FormFactory): |
284 | 298 | ( |
285 | 299 | 'type', |
286 | 300 | lambda: MultipleChoiceFilter( |
287 | - label='Typ', | |
288 | - choices=((False, 'zwykły'), (True, 'frazeologiczny'),), | |
301 | + label=_('Typ'), | |
302 | + choices=((False, _('zwykły')), (True, _('frazeologiczny')),), | |
289 | 303 | lookup='phraseologic', |
290 | 304 | ), |
291 | 305 | None, |
... | ... | @@ -293,7 +307,7 @@ class SchemaFormFactory(FormFactory): |
293 | 307 | ( |
294 | 308 | 'sie', |
295 | 309 | lambda: ModelMultipleChoiceFilter( |
296 | - label='Zwrotność', | |
310 | + label=_('Zwrotność'), | |
297 | 311 | queryset=InherentSie.objects.all().order_by('-priority'), |
298 | 312 | key='name', |
299 | 313 | human_values=polish_strings.TRUE_FALSE_YES_NO, |
... | ... | @@ -333,7 +347,7 @@ class SchemaFormFactory(FormFactory): |
333 | 347 | # label='Aspekt', |
334 | 348 | # queryset=Aspect.objects.exclude(name='').exclude(name='_').order_by('-priority'), |
335 | 349 | # key='name', |
336 | - # human_values=polish_strings.ASPECT, | |
350 | + # human_values=polish_strings.ASPECT(), | |
337 | 351 | # entry_lookup='subentries__aspect', |
338 | 352 | # # both Schema and Entry have the same related name for Subentry: |
339 | 353 | # # can use the same lookup path |
... | ... | @@ -366,7 +380,7 @@ class SchemaFormFactory(FormFactory): |
366 | 380 | #), |
367 | 381 | ( |
368 | 382 | None, None, |
369 | - lambda n: and_or_form_creator('Pozycja', data_add='position'), | |
383 | + lambda n: and_or_form_creator(_('Pozycja'), 'add-position-{}'.format(n), data_add='position'), | |
370 | 384 | ), |
371 | 385 | ) |
372 | 386 | |
... | ... | @@ -382,43 +396,43 @@ class PositionFormFactory(FormFactory): |
382 | 396 | form_class_name = 'PositionForm' |
383 | 397 | form_model = Position |
384 | 398 | form_formtype = 'position' |
385 | - form_header = 'Pozycja schematu' | |
399 | + form_header = _('Pozycja składniowa') | |
386 | 400 | |
387 | 401 | field_makers = ( |
388 | 402 | ( |
389 | 403 | 'gram_function', |
390 | 404 | lambda: ModelMultipleChoiceFilter( |
391 | - label='Funkcja gramatyczna', | |
405 | + label=_('Funkcja gramatyczna'), | |
392 | 406 | queryset=SyntacticFunction.objects.all(), |
393 | 407 | key='name', |
394 | - human_values=polish_strings.GRAM_FUNCTION, | |
408 | + human_values=polish_strings.GRAM_FUNCTION(), | |
395 | 409 | lookup='function', |
396 | 410 | ), None, |
397 | 411 | ), |
398 | 412 | ( |
399 | 413 | 'control', |
400 | 414 | lambda: ModelMultipleChoiceFilter( |
401 | - label='Kontrola', | |
415 | + label=_('Kontrola'), | |
402 | 416 | queryset=Control.objects.filter(positions__isnull=False).distinct(), |
403 | 417 | key='name', |
404 | - human_values=polish_strings.CONTROL, | |
418 | + human_values=polish_strings.CONTROL(), | |
405 | 419 | lookup='control', |
406 | 420 | ), None, |
407 | 421 | ), |
408 | 422 | ( |
409 | 423 | 'pred_control', |
410 | 424 | lambda: ModelMultipleChoiceFilter( |
411 | - label='Kontrola predykatywna', | |
425 | + label=_('Kontrola predykatywna'), | |
412 | 426 | queryset=PredicativeControl.objects.all(), |
413 | 427 | key='name', |
414 | - human_values=polish_strings.CONTROL, | |
428 | + human_values=polish_strings.CONTROL(), | |
415 | 429 | lookup='pred_control', |
416 | 430 | ), None, |
417 | 431 | ), |
418 | 432 | ( |
419 | 433 | 'phrase_type', |
420 | - lambda: PhraseTypeFilter(help_text='Typ frazy występujący na pozycji.'), | |
421 | - lambda n: and_or_form_creator('Fraza', field_name=(FormFactory.unique_name('phrase_type', n)), data_prefix='phrase_'), | |
434 | + lambda: PhraseTypeFilter(help_text=_('Typ frazy występujący na pozycji.')), | |
435 | + lambda n: and_or_form_creator(_('Fraza'), 'add-phrase-{}'.format(n), field_name=(FormFactory.unique_name('phrase_type', n)), data_prefix='phrase_'), | |
422 | 436 | ), |
423 | 437 | ) |
424 | 438 | |
... | ... | @@ -429,18 +443,62 @@ class PositionFormFactory(FormFactory): |
429 | 443 | raise KeyError(type(child_form)) |
430 | 444 | |
431 | 445 | |
446 | +class LemmaFormFactory(FormFactory): | |
447 | + | |
448 | + form_class_name = 'LemmaForm' | |
449 | + form_model = Lemma | |
450 | + form_formtype = 'lemma' | |
451 | + form_header = _('Lemat') | |
452 | + | |
453 | + field_makers = ( | |
454 | + ( | |
455 | + 'lemma', | |
456 | + lambda: RegexFilter( | |
457 | + label=_('Lemat'), | |
458 | + max_length=32, | |
459 | + lookup='name', | |
460 | + autocomplete='lex_lemma' | |
461 | + ), None, | |
462 | + ), | |
463 | + ) | |
464 | + | |
465 | + | |
432 | 466 | class LexFormFactory(FormFactory): |
433 | 467 | |
434 | 468 | form_class_name = 'LexForm' |
435 | 469 | form_model = PhraseType |
436 | 470 | form_formtype = 'phrase_lex' |
437 | - form_header = 'Frazeologizm' | |
471 | + form_header = _('Frazeologizm') | |
438 | 472 | |
439 | 473 | field_makers = ( |
440 | 474 | ( |
475 | + 'lemma_operator', | |
476 | + lambda: ModelMultipleChoiceFilter( | |
477 | + label=_('Wybór lematów'), | |
478 | + queryset=LemmaOperator.objects.all(), | |
479 | + key='name', | |
480 | + human_values=polish_strings.LEMMA_OPERATOR(), | |
481 | + lookup='lemma_operator', | |
482 | + ), None, | |
483 | + ), | |
484 | + ( | |
485 | + 'lemma_cooccur', | |
486 | + lambda: ModelMultipleChoiceFilter( | |
487 | + label=_('Łączenie lematów'), | |
488 | + queryset=LemmaCooccur.objects.all(), | |
489 | + key='name', | |
490 | + human_values=polish_strings.LEMMA_COOCCUR(), | |
491 | + lookup='lemma_cooccur', | |
492 | + ), None, | |
493 | + ), | |
494 | + ( | |
495 | + None, None, | |
496 | + lambda n: and_or_form_creator(_('Lemat'), 'add-lemma-{}'.format(n), data_add='lemma'), | |
497 | + ), | |
498 | + ( | |
441 | 499 | 'lex_type', |
442 | - lambda: PhraseTypeFilter(lex=True, help_text='Typ składniowy frazeologizmu.'), | |
443 | - lambda n: and_or_form_creator('Typ frazeologizmu', field_name=FormFactory.unique_name('lex_type', n), data_prefix='phrase_lex') | |
500 | + lambda: PhraseTypeFilter(lex=True, help_text=_('Typ składniowy frazeologizmu.')), | |
501 | + lambda n: and_or_form_creator(_('Typ frazeologizmu'), 'add-lex-{}'.format(n), field_name=FormFactory.unique_name('lex_type', n), data_prefix='phrase_lex') | |
444 | 502 | ), |
445 | 503 | ) |
446 | 504 | |
... | ... | @@ -448,62 +506,46 @@ class LexFormFactory(FormFactory): |
448 | 506 | def get_child_form_prefix(child_form): |
449 | 507 | if child_form.model_class == PhraseType: |
450 | 508 | return 'id__in' |
509 | + if child_form.model_class == Lemma: | |
510 | + return 'lemmata__in' | |
451 | 511 | raise KeyError(type(child_form)) |
452 | 512 | |
453 | -class LemmaFormFactory(FormFactory): | |
454 | - | |
455 | - form_class_name = 'LemmaForm' | |
456 | - form_model = Lemma | |
457 | - form_formtype = 'lemma' | |
458 | - form_header = 'Lemat' | |
459 | - | |
460 | - field_makers = ( | |
461 | - ( | |
462 | - 'lemma', | |
463 | - lambda: RegexFilter( | |
464 | - label='Lemat', | |
465 | - max_length=32, | |
466 | - lookup='name', | |
467 | - autocomplete='lex_lemma' | |
468 | - ), None, | |
469 | - ), | |
470 | - ) | |
471 | 513 | |
472 | 514 | class FrameFormFactory(FormFactory): |
473 | 515 | |
474 | 516 | form_class_name = 'FrameForm' |
475 | 517 | form_model = Frame |
476 | 518 | form_formtype = 'frame' |
477 | - form_header = 'Rama semantyczna' | |
519 | + form_header = _('Rama semantyczna') | |
478 | 520 | |
479 | 521 | field_makers = ( |
480 | 522 | ( |
481 | 523 | 'opinion', |
482 | 524 | lambda: ModelMultipleChoiceFilter( |
483 | - label='Opinia', | |
525 | + label=_('Opinia'), | |
484 | 526 | queryset=FrameOpinion.objects.exclude(key='unk').filter(frame__isnull=False).distinct(), |
485 | 527 | key='key', |
486 | - human_values=polish_strings.FRAME_OPINION, | |
528 | + human_values=polish_strings.FRAME_OPINION(), | |
487 | 529 | lookup='opinion', |
488 | 530 | ), None, |
489 | 531 | ), |
490 | 532 | ( |
491 | 533 | 'num_arguments', |
492 | 534 | lambda: RangeFilter( |
493 | - label='Liczba argumentów', | |
535 | + label=_('Liczba argumentów'), | |
494 | 536 | lookup='arguments_count', |
495 | 537 | ), None |
496 | 538 | ), |
497 | 539 | ( |
498 | 540 | 'num_preferences', |
499 | 541 | lambda: RangeFilter( |
500 | - label='Liczba preferencyj selekcyjnych argumentu', | |
542 | + label=_('Liczba preferencyj selekcyjnych argumentu'), | |
501 | 543 | lookup='argument__preferences_count', |
502 | 544 | ), None |
503 | 545 | ), |
504 | 546 | ( |
505 | 547 | None, None, |
506 | - lambda n: and_or_form_creator('Argument', data_add='argument'), | |
548 | + lambda n: and_or_form_creator(_('Argument'), 'add-argument-{}'.format(n), data_add='argument'), | |
507 | 549 | ), |
508 | 550 | ) |
509 | 551 | |
... | ... | @@ -513,13 +555,13 @@ class ArgumentFormFactory(FormFactory): |
513 | 555 | form_class_name = 'ArgumentForm' |
514 | 556 | form_model = Argument |
515 | 557 | form_formtype = 'argument' |
516 | - form_header = 'Argument ramy' | |
558 | + form_header = _('Argument semantyczny') | |
517 | 559 | |
518 | 560 | field_makers = ( |
519 | 561 | ( |
520 | 562 | 'role', |
521 | 563 | lambda: ModelMultipleChoiceFilter( |
522 | - label='Rola', | |
564 | + label=_('Rola'), | |
523 | 565 | queryset=SemanticRole.objects.filter(argumentrole__argument__isnull=False).distinct(), |
524 | 566 | key='role', |
525 | 567 | lookup='role__role', |
... | ... | @@ -528,7 +570,7 @@ class ArgumentFormFactory(FormFactory): |
528 | 570 | ( |
529 | 571 | 'role_attribute', |
530 | 572 | lambda: ModelMultipleChoiceFilter( |
531 | - label='Atrybut roli', | |
573 | + label=_('Atrybut roli'), | |
532 | 574 | queryset=RoleAttribute.objects.filter(argumentrole__argument__isnull=False).distinct(), |
533 | 575 | key='attribute', |
534 | 576 | lookup='role__attribute', |
... | ... | @@ -537,20 +579,20 @@ class ArgumentFormFactory(FormFactory): |
537 | 579 | ( |
538 | 580 | 'preference_type', |
539 | 581 | lambda: forms.ChoiceField( |
540 | - label='Preferencja selekcyjna', | |
541 | - choices=(('predefined', 'Predefinowana grupa znaczeń'), ('relational', 'Wyrażona przez relację'), ('synset', 'Wyrażona przez jednostkę leksykalną Słowosieci')), | |
582 | + label=_('Preferencja selekcyjna'), | |
583 | + choices=(('predefined', _('Predefiniowana grupa znaczeń')), ('relational', _('Wyrażona przez relację')), ('synset', _('Wyrażona przez jednostkę leksykalną Słowosieci'))), | |
542 | 584 | required=False, |
543 | 585 | ), |
544 | - lambda n: and_or_form_creator('Preferencja selekcyjna', field_name=FormFactory.unique_name('preference_type', n)) | |
586 | + lambda n: and_or_form_creator(_('Preferencja selekcyjna'), 'add-preference-{}'.format(n), field_name=FormFactory.unique_name('preference_type', n)) | |
545 | 587 | ), |
546 | 588 | ( |
547 | 589 | None, None, |
548 | - lambda n: and_or_form_creator('Pozycja', data_add='position'), | |
590 | + lambda n: and_or_form_creator(_('Pozycja'), 'add-position-{}'.format(n), data_add='position'), | |
549 | 591 | ), |
550 | 592 | ( |
551 | 593 | 'phrase_type', |
552 | - lambda: PhraseTypeFilter(help_text='Typ frazy, przez którą może być realizowany argument.'), | |
553 | - lambda n: and_or_form_creator('Fraza', field_name=FormFactory.unique_name('phrase_type', n), data_prefix='phrase_'), | |
594 | + lambda: PhraseTypeFilter(help_text=_('Typ frazy, przez którą może być realizowany argument.')), | |
595 | + lambda n: and_or_form_creator(_('Fraza'), 'add-phrase-{}'.format(n), field_name=FormFactory.unique_name('phrase_type', n), data_prefix='phrase_'), | |
554 | 596 | ), |
555 | 597 | ) |
556 | 598 | |
... | ... | @@ -560,7 +602,7 @@ class PredefinedPreferenceFormFactory(FormFactory): |
560 | 602 | form_class_name = 'PredefinedPreferenceForm' |
561 | 603 | form_model = PredefinedSelectionalPreference |
562 | 604 | form_formtype = 'predefined' |
563 | - form_header = 'Preferencja predefiniowana' | |
605 | + form_header = _('Preferencja predefiniowana') | |
564 | 606 | |
565 | 607 | field_makers = ( |
566 | 608 | ( |
... | ... | @@ -581,13 +623,13 @@ class RelationalPreferenceFormFactory(FormFactory): |
581 | 623 | form_class_name = 'RelationalPreferenceForm' |
582 | 624 | form_model = RelationalSelectionalPreference |
583 | 625 | form_formtype = 'relational' |
584 | - form_header = 'Preferencja – relacja' | |
626 | + form_header = _('Preferencja – relacja') | |
585 | 627 | |
586 | 628 | field_makers = ( |
587 | 629 | ( |
588 | 630 | 'relation', |
589 | 631 | lambda: ModelMultipleChoiceFilter( |
590 | - label='Relacja', | |
632 | + label=_('Relacja'), | |
591 | 633 | queryset=SelectionalPreferenceRelation.objects.all(), |
592 | 634 | key='key', |
593 | 635 | # TODO |
... | ... | @@ -597,7 +639,7 @@ class RelationalPreferenceFormFactory(FormFactory): |
597 | 639 | ( |
598 | 640 | 'to_role', |
599 | 641 | lambda : ModelMultipleChoiceFilter( |
600 | - label='Do: rola', | |
642 | + label=_('Do: rola'), | |
601 | 643 | queryset=SemanticRole.objects.all(), |
602 | 644 | key='role', |
603 | 645 | lookup='to__role__role', |
... | ... | @@ -606,7 +648,7 @@ class RelationalPreferenceFormFactory(FormFactory): |
606 | 648 | ( |
607 | 649 | 'to_attribute', |
608 | 650 | lambda: ModelMultipleChoiceFilter( |
609 | - label='Do: atrybut', | |
651 | + label=_('Do: atrybut'), | |
610 | 652 | queryset=RoleAttribute.objects.all(), |
611 | 653 | key='attribute', |
612 | 654 | lookup='to__role__attribute', |
... | ... | @@ -621,13 +663,13 @@ class SynsetPreferenceFormFactory(FormFactory): |
621 | 663 | # TODO |
622 | 664 | form_model = Synset |
623 | 665 | form_formtype = 'synset' |
624 | - form_header = 'Preferencja – Słowosieć' | |
666 | + form_header = _('Preferencja – Słowosieć') | |
625 | 667 | |
626 | 668 | field_makers = ( |
627 | 669 | ( |
628 | 670 | 'synset', |
629 | 671 | lambda: RegexFilter( |
630 | - label='Jednostka leksykalna', | |
672 | + label=_('Jednostka leksykalna'), | |
631 | 673 | max_length=200, |
632 | 674 | lookup='lexical_units__text_rep', |
633 | 675 | autocomplete='lu' |
... | ... | @@ -661,26 +703,21 @@ class PhraseAttributesFormFactory(FormFactory): |
661 | 703 | self.model_class = PhraseType |
662 | 704 | |
663 | 705 | components = [self.make_field(cls.unique_name('negated', n))] |
664 | - for _, name in all_fields: | |
706 | + for field, name in all_fields: | |
665 | 707 | uniq_name = cls.unique_name(name, n) |
666 | 708 | if name.endswith('_lexes'): |
667 | - flds = and_or_form_creator('Fraza', field_name=uniq_name, data_prefix='phrase_lex') | |
709 | + flds = and_or_form_creator(_('Fraza'), 'add-phrase-1-{}'.format(n), field_name=uniq_name, data_prefix='phrase_lex') | |
668 | 710 | elif name.endswith('_lex'): |
669 | - flds = and_or_form_creator('Fraza', field_name=uniq_name, data_prefix='phrase_lex') | |
711 | + flds = and_or_form_creator(_('Fraza'), 'add-phrase-2-{}'.format(n), field_name=uniq_name, data_prefix='phrase_lex') | |
670 | 712 | elif name.endswith('_phrase'): |
671 | - flds = and_or_form_creator('Fraza', field_name=uniq_name, data_prefix='phrase_') | |
713 | + flds = and_or_form_creator(_('Fraza'), 'add-phrase-3-{}'.format(n), field_name=uniq_name, data_prefix='phrase_') | |
672 | 714 | else: |
673 | 715 | flds = [self.make_field(uniq_name)] |
674 | 716 | components += flds |
675 | - if lex_model: | |
676 | - components += [ | |
677 | - self.make_field(cls.unique_name('lex_lemma_operator', n)), | |
678 | - self.make_field(cls.unique_name('lex_lemma_cooccur', n)), | |
679 | - ] + and_or_form_creator('Lemat', data_add='lemma') | |
680 | - pt = polish_strings.PHRASE_TYPE[phrase_type] | |
717 | + pt = polish_strings.PHRASE_TYPE()[phrase_type] | |
681 | 718 | header = pt.capitalize() if phrase_type in polish_strings.NO_PHRASE_NAME else 'Fraza {}'.format(pt) |
682 | 719 | if lex_model: |
683 | - header += ' (frazeologizm)' | |
720 | + header += ' ({})'.format(_('frazeologizm')) | |
684 | 721 | self.helper.layout = cls.make_layout( |
685 | 722 | header, |
686 | 723 | components |
... | ... | @@ -691,26 +728,20 @@ class PhraseAttributesFormFactory(FormFactory): |
691 | 728 | pt_q = Q(('{}main_type__name'.format('lexicalized_phrase__' if lex_phrase else ''), phrase_type)) |
692 | 729 | return super().get_queries() + [pt_q] |
693 | 730 | |
694 | - @staticmethod | |
695 | - def get_child_form_prefix(child_form): | |
696 | - if child_form.model_class == Lemma: | |
697 | - return 'lemmata__in' | |
698 | - raise KeyError(type(child_form)) | |
699 | - | |
700 | 731 | AttributesForm.base_fields[cls.unique_name('negated', n)] = SwitchField('Zaneguj', css_class='negate-switch') |
701 | 732 | for field, name in all_fields: |
702 | 733 | print('***', name, field.name, type(field)) |
703 | 734 | if field.name == 'lexes': |
704 | - form_field = PhraseTypeFilter(help_text='Fraza składowa frazeologizmu porównawczego.', lex=True) | |
735 | + form_field = PhraseTypeFilter(help_text=_('Fraza składowa frazeologizmu porównawczego.'), lex=True) | |
705 | 736 | elif field.name == 'lex': |
706 | - form_field = PhraseTypeFilter(help_text='Fraza realizująca frazeologizm.') | |
737 | + form_field = PhraseTypeFilter(help_text=_('Fraza realizująca frazeologizm.')) | |
707 | 738 | elif field.name == 'phrase': |
708 | - form_field = PhraseTypeFilter(help_text='Typ składniowy frazeologizmu.') | |
739 | + form_field = PhraseTypeFilter(help_text=_('Typ składniowy frazeologizmu.')) | |
709 | 740 | elif type(field) == CharField: |
710 | 741 | # TODO other autocompletes? |
711 | 742 | autocomplete = 'fixed' if field.name == 'text' else None |
712 | 743 | form_field = RegexFilter( |
713 | - label=polish_strings.PHRASE_ATTRIBUTE.get(field.name, field.name), | |
744 | + label=polish_strings.PHRASE_ATTRIBUTE().get(field.name, field.name), | |
714 | 745 | lookup='attributes__{}attributes__{}'.format(phrase_type, field.name), |
715 | 746 | max_length=200, |
716 | 747 | autocomplete=autocomplete, |
... | ... | @@ -718,11 +749,13 @@ class PhraseAttributesFormFactory(FormFactory): |
718 | 749 | else: |
719 | 750 | lex_attr = name.startswith('lex') |
720 | 751 | queryset_q = Q(('{}{}attributes__isnull'.format('lex' if lex_attr else '', phrase_type), False)) |
752 | + queryset = type(field.related_model()).objects.filter(queryset_q).distinct() | |
721 | 753 | form_field = ModelMultipleChoiceFilter( |
722 | - label=polish_strings.PHRASE_ATTRIBUTE.get(field.name, field.name), | |
723 | - queryset=type(field.related_model()).objects.filter(queryset_q).distinct(), | |
754 | + label=polish_strings.PHRASE_ATTRIBUTE().get(field.name, field.name), | |
755 | + queryset=queryset, | |
724 | 756 | key='name', |
725 | - human_values=polish_strings.PHRASE_ATTRIBUTE_VALUE, | |
757 | + human_values=polish_strings.PHRASE_ATTRIBUTE_VALUE(), | |
758 | + checkboxes=(len(queryset) <= 8), | |
726 | 759 | lookup='{}attributes__{}{}attributes__{}'.format( |
727 | 760 | 'lexicalized_phrase__' if lex_phrase and not lex_attr else '', |
728 | 761 | 'lexphrasetypeattributes__lex' if lex_attr else '', |
... | ... | @@ -731,19 +764,6 @@ class PhraseAttributesFormFactory(FormFactory): |
731 | 764 | ), |
732 | 765 | ) |
733 | 766 | AttributesForm.base_fields[cls.unique_name(name, n)] = form_field |
734 | - if lex_model: | |
735 | - AttributesForm.base_fields[cls.unique_name('lex_lemma_operator', n)] = ModelMultipleChoiceFilter( | |
736 | - label='Operator lematów', | |
737 | - queryset=LemmaOperator.objects.all(), | |
738 | - key='name', | |
739 | - lookup='lemma_operator', | |
740 | - ) | |
741 | - AttributesForm.base_fields[cls.unique_name('lex_lemma_cooccur', n)] = ModelMultipleChoiceFilter( | |
742 | - label='Łączenie lematów', | |
743 | - queryset=LemmaCooccur.objects.all(), | |
744 | - key='name', | |
745 | - lookup='lemma_cooccur', | |
746 | - ) | |
747 | 767 | |
748 | 768 | return AttributesForm |
749 | 769 | |
... | ... |
entries/polish_strings.py
1 | -POS = { | |
2 | - 'adj' : 'przymiotnik', | |
3 | - 'adv' : 'przysłówek', | |
4 | - 'noun' : 'rzeczownik', | |
5 | - 'verb' : 'czasownik', | |
6 | -} | |
1 | +from django.utils.translation import gettext_lazy as _ | |
7 | 2 | |
8 | -ASPECT = { 'perf' : 'dokonany', 'imperf' : 'niedokonany', } | |
3 | +def POS(): | |
4 | + return { | |
5 | + 'adj' : _('przymiotnik'), | |
6 | + 'adv' : _('przysłówek'), | |
7 | + 'noun' : _('rzeczownik'), | |
8 | + 'verb' : _('czasownik'), | |
9 | + } | |
9 | 10 | |
10 | -NEGATION = { 'neg' : 'zanegowany', 'aff' : 'niezanegowany', '_' : 'dowolny', } | |
11 | +ASPECT = { 'perf' : _('dokonany'), 'imperf' : _('niedokonany'), } | |
11 | 12 | |
12 | -TRUE_FALSE_YES_NO = { 'true' : 'tak', 'false' : 'nie', } | |
13 | +NEGATION = { 'neg' : _('zanegowany'), 'aff' : _('niezanegowany'), '_' : _('dowolny'), } | |
13 | 14 | |
14 | -SCHEMA_OPINION = { | |
15 | - 'vul' : 'wulgarny', | |
16 | - 'col' : 'potoczny', | |
17 | - 'dat' : 'archaiczny', | |
18 | - 'bad' : 'zły', | |
19 | - 'unc' : 'wątpliwy', | |
20 | - 'cer' : 'pewny', | |
21 | -} | |
15 | +TRUE_FALSE_YES_NO = { 'true' : _('tak'), 'false' : _('nie'), } | |
22 | 16 | |
23 | -FRAME_OPINION = { | |
24 | - 'vul' : 'wulgarna', | |
25 | - 'col' : 'potoczna', | |
26 | - 'dat' : 'archaiczna', | |
27 | - 'bad' : 'zła', | |
28 | - 'unc' : 'niepewna', | |
29 | - 'cer' : 'pewna', | |
30 | - 'rar' : 'sporadyczna', | |
31 | - 'dom' : 'dziedzinowa', | |
32 | - 'met' : 'metaforyczna', | |
33 | - 'unk' : 'nieznana', | |
34 | -} | |
17 | +def SCHEMA_OPINION(): | |
18 | + return { | |
19 | + 'vul' : _('wulgarny'), | |
20 | + 'col' : _('potoczny'), | |
21 | + 'dat' : _('archaiczny'), | |
22 | + 'bad' : _('zły'), | |
23 | + 'unc' : _('wątpliwy'), | |
24 | + 'cer' : _('pewny'), | |
25 | + } | |
35 | 26 | |
36 | -GRAM_FUNCTION = { | |
37 | - 'subj' : 'podmiot', | |
38 | - 'obj' : 'dopełnienie', | |
39 | - 'head' : 'centrum', | |
40 | -} | |
27 | +def FRAME_OPINION(): | |
28 | + return { | |
29 | + 'vul' : _('wulgarna'), | |
30 | + 'col' : _('potoczna'), | |
31 | + 'dat' : _('archaiczna'), | |
32 | + 'bad' : _('zła'), | |
33 | + 'unc' : _('niepewna'), | |
34 | + 'cer' : _('pewna'), | |
35 | + 'rar' : _('sporadyczna'), | |
36 | + 'dom' : _('dziedzinowa'), | |
37 | + 'met' : _('metaforyczna'), | |
38 | + 'unk' : _('nieznana'), | |
39 | + } | |
41 | 40 | |
42 | -CONTROL = { | |
43 | - 'controller' : 'kontrolujący', | |
44 | - 'controllee' : 'kontrolowany', | |
45 | - 'controller2' : 'kontrolujący #2', | |
46 | - 'controllee2' : 'kontrolowany #2', | |
47 | - 'pred_controller' : 'kontrolujący', | |
48 | - 'pred_controllee' : 'kontrolowany', | |
49 | -} | |
41 | +def GRAM_FUNCTION(): | |
42 | + return { | |
43 | + 'subj' : _('podmiot'), | |
44 | + 'obj' : _('dopełnienie'), | |
45 | + 'head' : _('centrum'), | |
46 | + } | |
50 | 47 | |
51 | -PHRASE_ATTRIBUTE = { | |
52 | - 'case' : 'Przypadek', | |
53 | - 'num' : 'Liczba', | |
54 | - 'gend' : 'Rodzaj', | |
55 | - 'deg' : 'Stopień', | |
56 | - 'prep' : 'Przyimek', | |
57 | - 'comprep' : 'Przyimek złożony', | |
58 | - 'inhsie' : 'Inherentne <i>się</i>', | |
59 | - 'cptype' : 'Typ frazy zdaniowej', | |
60 | - 'cpreals' : 'Realizacje', | |
61 | - 'aspect' : 'Aspekt', | |
62 | - 'advcat' : 'Typ okolicznika', | |
63 | - 'comparcat' : 'Typ frazy porównawczej', | |
64 | - 'text' : 'Postać frazeologizmu', | |
65 | -} | |
48 | +def CONTROL(): | |
49 | + return { | |
50 | + 'controller' : _('kontrolujący'), | |
51 | + 'controllee' : _('kontrolowany'), | |
52 | + 'controller2' : _('kontrolujący #2'), | |
53 | + 'controllee2' : _('kontrolowany #2'), | |
54 | + 'pred_controller' : _('kontrolujący'), | |
55 | + 'pred_controllee' : _('kontrolowany'), | |
56 | + } | |
66 | 57 | |
67 | -PHRASE_ATTRIBUTE_VALUE = { | |
68 | - 'str' : 'strukturalny', | |
69 | - 'nom' : 'mianownik', | |
70 | - 'gen' : 'dopełniacz', | |
71 | - 'dat' : 'celownik', | |
72 | - 'acc' : 'biernik', | |
73 | - 'inst' : 'narzędnik', | |
74 | - 'loc' : 'miejscownik', | |
75 | - 'pred' : 'predykatywny', | |
76 | - 'part' : 'partytytwny', | |
77 | - 'postp' : 'poprzyimkowy', | |
78 | - 'agr' : 'uzgodnienie', | |
79 | - '_' : 'dowolnie', | |
80 | - 'sg' : 'pojedyncza', | |
81 | - 'pl' : 'mnoga', | |
82 | - 'm1' : 'męski osobowy', | |
83 | - 'm2' : 'męski żywotny', | |
84 | - 'm3' : 'męski nieżywotny', | |
85 | - 'f' : 'żenski', | |
86 | - 'n' : 'nijaki', | |
87 | - 'pos' : 'równy', | |
88 | - 'com' : 'wyższy', | |
89 | - 'sup' : 'najwyższy', | |
90 | -} | |
58 | +def PHRASE_ATTRIBUTE(): | |
59 | + return { | |
60 | + 'case' : _('Przypadek'), | |
61 | + 'num' : _('Liczba'), | |
62 | + 'gend' : _('Rodzaj'), | |
63 | + 'deg' : _('Stopień'), | |
64 | + 'prep' : _('Przyimek'), | |
65 | + 'comprep' : _('Przyimek złożony'), | |
66 | + 'inhsie' : _('Inherentne <i>się</i>'), | |
67 | + 'neg' : _('Zanegowanie'), | |
68 | + 'cptype' : _('Typ frazy zdaniowej'), | |
69 | + 'cpreals' : _('Realizacje'), | |
70 | + 'aspect' : _('Aspekt'), | |
71 | + 'advcat' : _('Typ okolicznika'), | |
72 | + 'comparcat' : _('Typ frazy porównawczej'), | |
73 | + 'text' : _('Postać frazeologizmu'), | |
74 | + } | |
91 | 75 | |
92 | -PHRASE_TYPE = { | |
93 | - 'adjp' : 'przymiotnikowa', | |
94 | - 'advp' : 'przysłówkowa', | |
95 | - 'compar' : 'porównawcza', | |
96 | - 'comprepnp' : 'przyimkowa z przyimkiem złożonym', | |
97 | - 'cp' : 'zdaniowa', | |
98 | - 'distrp' : 'dystrybutywna', | |
99 | - # TODO | |
100 | - 'E' : 'podmiot czasownika wymagającego bezokolicznika', | |
101 | - 'fixed' : 'frazeologizm zamrożony', | |
102 | - 'infp' : 'bezokolicznikowa', | |
103 | - 'lex' : 'frazeologizm', | |
104 | - 'ncp' : 'zdaniowa z korelatem', | |
105 | - 'nonch' : 'niechromatyczna', | |
106 | - 'np' : 'rzeczownikowa', | |
107 | - 'nump' : 'liczebnikowa', | |
108 | - 'or' : 'mowa niezależna', | |
109 | - 'possp' : 'posesywna', | |
110 | - 'ppasp' : 'imiesłowowa', | |
111 | - 'prepadjp' : 'przyimkowo-przymotnikowa', | |
112 | - 'prepgerp' : 'przyimkowo-odsłownikowa', | |
113 | - 'prepncp' : 'zdaniowa z korelatem przyimkowym', | |
114 | - 'prepnp' : 'przyimkowo-rzeczownikowa', | |
115 | - 'prepnump' : 'przyimkowo-liczebnikowa', | |
116 | - 'prepppasp' : 'przyimkowo-imiesłowowa', | |
117 | - 'qub' : 'partykuła', | |
118 | - 'recip' : 'wzajemnościowa partykuła się', | |
119 | - 'refl' : 'zwrotna partykuła się', | |
120 | - 'xp' : 'okolicznikowa', | |
121 | -} | |
76 | +def PHRASE_ATTRIBUTE_VALUE(): | |
77 | + return { | |
78 | + 'str' : _('strukturalny'), | |
79 | + 'nom' : _('mianownik'), | |
80 | + 'gen' : _('dopełniacz'), | |
81 | + 'dat' : _('celownik'), | |
82 | + 'acc' : _('biernik'), | |
83 | + 'inst' : _('narzędnik'), | |
84 | + 'loc' : _('miejscownik'), | |
85 | + 'pred' : _('predykatywny'), | |
86 | + 'part' : _('partytytwny'), | |
87 | + 'postp' : _('poprzyimkowy'), | |
88 | + 'agr' : _('uzgodnienie'), | |
89 | + '_' : _('dowolnie'), | |
90 | + 'sg' : _('pojedyncza'), | |
91 | + 'pl' : _('mnoga'), | |
92 | + 'm1' : _('męski osobowy'), | |
93 | + 'm2' : _('męski żywotny'), | |
94 | + 'm3' : _('męski nieżywotny'), | |
95 | + 'f' : _('żeński'), | |
96 | + 'n' : _('nijaki'), | |
97 | + 'pos' : _('równy'), | |
98 | + 'com' : _('wyższy'), | |
99 | + 'sup' : _('najwyższy'), | |
100 | + } | |
101 | + | |
102 | +def PHRASE_TYPE(): | |
103 | + return { | |
104 | + 'adjp' : _('przymiotnikowa'), | |
105 | + 'advp' : _('przysłówkowa'), | |
106 | + 'compar' : _('porównawcza'), | |
107 | + 'comprepnp' : _('przyimkowa z przyimkiem złożonym'), | |
108 | + 'cp' : _('zdaniowa'), | |
109 | + 'distrp' : _('dystrybutywna'), | |
110 | + # TODO | |
111 | + 'E' : _('podmiot czasownika wymagającego bezokolicznika'), | |
112 | + 'fixed' : _('frazeologizm zamrożony'), | |
113 | + 'infp' : _('bezokolicznikowa'), | |
114 | + 'lex' : _('frazeologizm'), | |
115 | + 'ncp' : _('zdaniowa z korelatem'), | |
116 | + 'nonch' : _('niechromatyczna'), | |
117 | + 'np' : _('rzeczownikowa'), | |
118 | + 'nump' : _('liczebnikowa'), | |
119 | + 'or' : _('mowa niezależna'), | |
120 | + 'possp' : _('posesywna'), | |
121 | + 'ppasp' : _('imiesłowowa'), | |
122 | + 'prepadjp' : _('przyimkowo-przymiotnikowa'), | |
123 | + 'prepgerp' : _('przyimkowo-odsłownikowa'), | |
124 | + 'prepncp' : _('zdaniowa z korelatem przyimkowym'), | |
125 | + 'prepnp' : _('przyimkowo-rzeczownikowa'), | |
126 | + 'prepnump' : _('przyimkowo-liczebnikowa'), | |
127 | + 'prepppasp' : _('przyimkowo-imiesłowowa'), | |
128 | + 'qub' : _('partykuła'), | |
129 | + 'recip' : _('wzajemnościowa partykuła się'), | |
130 | + 'refl' : _('zwrotna partykuła się'), | |
131 | + 'xp' : _('okolicznikowa'), | |
132 | + } | |
122 | 133 | |
123 | 134 | # phrase types that should not be displayed as “Fraza xyz”, but “Xyz” |
124 | 135 | NO_PHRASE_NAME = ( |
125 | 136 | 'E', 'fixed', 'lex', 'or', 'qub', 'recip', 'refl', |
126 | 137 | ) |
138 | + | |
139 | +def LEMMA_OPERATOR(): | |
140 | + return { | |
141 | + 'or' : _('lub'), | |
142 | + 'xor' : _('wyłącznie'), | |
143 | + } | |
144 | + | |
145 | +def LEMMA_COOCCUR(): | |
146 | + return { | |
147 | + 'concat' : _('szeregowo (bez spójnika)'), | |
148 | + 'coord' : _('koordynacja (ze spójnikiem)'), | |
149 | + } | |
... | ... |
entries/static/entries/js/entries.js
... | ... | @@ -57,7 +57,7 @@ function hide_form_errors() { |
57 | 57 | } |
58 | 58 | |
59 | 59 | function show_form_errors(errors) { |
60 | - show_warning_text('Formularz filtrowania zawiera błędy.'); | |
60 | + show_warning_text(gettext('Formularz filtrowania zawiera błędy.')); | |
61 | 61 | for (var field in errors) { |
62 | 62 | var field_element = $('#id_' + field); |
63 | 63 | field_element.after('<p class="bg-warning form-error">' + errors[field] + '</p>'); |
... | ... | @@ -98,12 +98,12 @@ function bind_collapse_subforms(selector) { |
98 | 98 | if ($(this).data('collapsed')) { |
99 | 99 | $(this).closest('legend').nextAll().show(); |
100 | 100 | $(this).closest('legend').find('.collapsed-info').html(''); |
101 | - $(this).html('zwiń'); | |
101 | + $(this).html(gettext('zwiń')); | |
102 | 102 | $(this).data('collapsed', false); |
103 | 103 | } else { |
104 | 104 | $(this).closest('legend').nextAll().hide(); |
105 | 105 | $(this).closest('legend').find('.collapsed-info').html('[...]'); |
106 | - $(this).html('rozwiń'); | |
106 | + $(this).html(gettext('rozwiń')); | |
107 | 107 | $(this).data('collapsed', true); |
108 | 108 | } |
109 | 109 | }); |
... | ... | @@ -122,14 +122,16 @@ function bind_negations(selector) { |
122 | 122 | |
123 | 123 | function bind_ors(selector) { |
124 | 124 | selector.find('.or-button').click(function() { |
125 | - // if there is no subform yet, nothing will be inserted | |
126 | 125 | // prevAll: the elements are returned in order beginning with the closest sibling |
127 | 126 | var insert_after = $(this).prevAll('.subform').first(); |
127 | + // if there is no subform yet, nothing will be inserted | |
128 | + if (insert_after.length == 0) { | |
129 | + return; | |
130 | + } | |
128 | 131 | // if there is already an ‘or’ there, nothing will be inserted |
129 | 132 | if (insert_after.next().hasClass('form-or')) { |
130 | 133 | return; |
131 | 134 | } |
132 | - insert_after.after('<div class="form-or mb-1 ml-3"><span class="btn btn-primary btn-sm disabled">LUB</span><button type="button" class="btn remove-or-button btn-sm btn-warning">Usuń</div>'); | |
133 | 135 | selector.find('.remove-or-button').mouseenter(function() { |
134 | 136 | $(this).closest('div').addClass('to-remove'); |
135 | 137 | }).mouseleave(function() { |
... | ... | @@ -137,6 +139,10 @@ function bind_ors(selector) { |
137 | 139 | }).click(function() { |
138 | 140 | $(this).closest('div').remove(); |
139 | 141 | }); |
142 | + // add the ‘or’ | |
143 | + insert_after.after('<div class="form-or mb-1 ml-3"><span class="btn btn-primary btn-sm disabled">' + gettext('LUB') + '</span><button type="button" class="btn remove-or-button btn-sm btn-warning">' + gettext('Usuń') + '</div>'); | |
144 | + // add a subform | |
145 | + add_subform($('#' + $(this).data('add-id'))); | |
140 | 146 | }); |
141 | 147 | } |
142 | 148 | |
... | ... | @@ -147,7 +153,7 @@ function bind_autocompletes(selector) { |
147 | 153 | source: function(request, autocompleter) { |
148 | 154 | $.ajax({ |
149 | 155 | type : 'get', |
150 | - url : '/entries/autocomplete/', | |
156 | + url : '/' + lang + '/entries/autocomplete/', | |
151 | 157 | dataType : 'json', |
152 | 158 | data : {'what' : autocompleted.data('autocomplete'), 'text' : request.term}, |
153 | 159 | success : function(response) { |
... | ... | @@ -190,7 +196,7 @@ function insert_subform(subform_type, inserter) { |
190 | 196 | // to be inserted into the DOM before doing further stuff with it |
191 | 197 | async : false, |
192 | 198 | type : 'get', |
193 | - url : '/entries/get_subform/', | |
199 | + url : '/' + lang + '/entries/get_subform/', | |
194 | 200 | data : {'subform_type' : subform_type}, |
195 | 201 | dataType : 'json', |
196 | 202 | success : function(response) { |
... | ... | @@ -206,46 +212,6 @@ function insert_subform(subform_type, inserter) { |
206 | 212 | } |
207 | 213 | |
208 | 214 | function initialize_main_form() { |
209 | - | |
210 | - /* | |
211 | - // accordion variant – only one panel expanded at one time | |
212 | - //$('#main-form').prepend('<div class="accordion" id="main-form-accordion"></div>'); | |
213 | - // independent collapsibles variant – any cobination of panels expanded at one time | |
214 | - $('#main-form').prepend('<div id="main-form-accordion"></div>'); | |
215 | - var inserter = function(form_type, header, expanded) { | |
216 | - return function(form_html) { | |
217 | - $('#main-form-accordion').append( | |
218 | - '<div class="card">\ | |
219 | - <div class="card-header" id="heading-form-' + form_type + '"><h2 class="mb-0">\ | |
220 | - <button class="btn btn-link' + (expanded ? '' : ' collapsed') + '" type="button" data-toggle="collapse" data-target="#collapse-form-' + form_type + '" aria-expanded="' + (expanded ? 'true' : 'false') +'" aria-controls="collapse=form-' + form_type + '">' + | |
221 | - header + | |
222 | - ' [<span class="collapse-form-state">' + (expanded ? 'Zwiń' : 'Rozwiń') +'</span>]' + | |
223 | - '</button></h2>\ | |
224 | - </div>\ | |
225 | - <div id="collapse-form-' + form_type + '" class="collapse form-collapse' + (expanded ? ' show' : '') + '" aria-labelledby="heading-form-' + form_type + | |
226 | - // uncomment for accordion variant (all other collapsibles under this parent will be collapsed on expansion) | |
227 | - //'" data-parent="#main-form-accordion">' + | |
228 | - '<div class="card-body" id="main-form-' + form_type + '">' + | |
229 | - form_html + | |
230 | - '</div>\ | |
231 | - </div>\ | |
232 | - </div>') | |
233 | - return $('#main-form-accordion').children().last(); | |
234 | - }; | |
235 | - }; | |
236 | - | |
237 | - //insert_subform('entry', inserter('entry', 'Po właściwościach haseł', false)); | |
238 | - //insert_subform('schema', inserter('schema', 'Po właściwościach schematów', true)); | |
239 | - insert_subform('schema', inserter('schema', 'Po właściwościach schematów', false)); | |
240 | - //insert_subform('frame', inserter('frame', 'Po właściwościach ram', true)); | |
241 | - insert_subform('frame', inserter('frame', 'Po właściwościach ram', false)); | |
242 | - | |
243 | - $('.form-collapse').on('show.bs.collapse', function() { | |
244 | - $(this).prev().find('.collapse-form-state').html('Zwiń'); | |
245 | - }).on('hide.bs.collapse', function(){ | |
246 | - $(this).prev().find('.collapse-form-state').html('Rozwiń'); | |
247 | - }); | |
248 | - */ | |
249 | 215 | |
250 | 216 | bind_form_events($('#main-form')); |
251 | 217 | |
... | ... | @@ -261,8 +227,8 @@ function initialize_main_form() { |
261 | 227 | hide_form_errors(); |
262 | 228 | var data = { 'forms' : serialize_forms($(this)) }; |
263 | 229 | $.ajax({ |
264 | - type : 'post',//$(this).attr('method'), | |
265 | - url : $(this).attr('action'), | |
230 | + type : 'post', | |
231 | + url : '/' + lang + '/entries/get_entries/', | |
266 | 232 | dataType : 'json', |
267 | 233 | data : data, |
268 | 234 | timeout : 60000, |
... | ... | @@ -329,8 +295,8 @@ function add_subform(button) { |
329 | 295 | |
330 | 296 | function make_opinion_row(item, span, width) { |
331 | 297 | var opinion_row = document.createElement('tr'); |
332 | - opinion_row.innerHTML = '<td class="py-2 px-1" style="width: ' + width + 'em;">Opinia:</td>'; | |
333 | - opinion_row.innerHTML += '<td class="py-2 px-1" colspan="' + span + '">[' + item.id + '] ' + item.opinion + '</td>'; | |
298 | + opinion_row.innerHTML = '<td class="py-2 px-1" style="width: ' + width + 'em;">' + gettext('Opinia') + ':</td>'; | |
299 | + opinion_row.innerHTML += '<td class="py-2 px-1" colspan="' + span + '">' + item.opinion + '</td>'; | |
334 | 300 | return opinion_row; |
335 | 301 | } |
336 | 302 | |
... | ... | @@ -344,7 +310,7 @@ function schema2dom(schema) { |
344 | 310 | var div = document.createElement('div'); |
345 | 311 | div.className = 'schema'; |
346 | 312 | var table = document.createElement('table'); |
347 | - table.className = 'table table-borderless border border-primary'; | |
313 | + table.className = 'table table-borderless border border-secondary'; | |
348 | 314 | var tbody = document.createElement('tbody'); |
349 | 315 | |
350 | 316 | // opinion |
... | ... | @@ -352,14 +318,14 @@ function schema2dom(schema) { |
352 | 318 | |
353 | 319 | // position props and phrase types |
354 | 320 | var props_row = document.createElement('tr'); |
355 | - props_row.innerHTML = '<td class="py-2 px-1">Funkcja:</td>'; | |
321 | + props_row.innerHTML = '<td class="py-2 px-1">' + gettext('Funkcja') + ':</td>'; | |
356 | 322 | var phrases_row = document.createElement('tr'); |
357 | - var phrases_html = '<td class="py-2 px-1">Typy fraz:</td>'; | |
323 | + var phrases_html = '<td class="py-2 px-1">' + gettext('Typy fraz') + ':</td>'; | |
358 | 324 | for (var i in schema.positions) { |
359 | 325 | var position = schema.positions[i]; |
360 | 326 | // position props: function, control, predicative control |
361 | 327 | var props_td = document.createElement('td'); |
362 | - props_td.className = 'py-2 px-1 border-top border-left border-primary'; | |
328 | + props_td.className = 'py-2 px-1 border-top border-left border-secondary'; | |
363 | 329 | var props_spans = []; |
364 | 330 | if (position.func.str !== '') { |
365 | 331 | props_spans.push(tooltipped_span(position.func.str, position.func.desc)); |
... | ... | @@ -373,10 +339,10 @@ function schema2dom(schema) { |
373 | 339 | props_td.innerHTML = props_spans.join(','); |
374 | 340 | props_row.append(props_td); |
375 | 341 | // don’t append to phrases_row.innerHTML since it automatically closes tags *** (?) |
376 | - phrases_html += '<td class="px-1 border-top border-left border-primary text-break">'; | |
342 | + phrases_html += '<td class="px-1 border-top border-left border-secondary text-break">'; | |
377 | 343 | for (var j in position.phrases) { |
378 | 344 | var phrase = position.phrases[j]; |
379 | - var cls = j > 0 ? ' border-top border-primary' : ''; | |
345 | + var cls = j > 0 ? ' border-top border-secondary' : ''; | |
380 | 346 | for (var k in phrase.arguments) { |
381 | 347 | cls += ' argument-' + phrase.arguments[k]; |
382 | 348 | } |
... | ... | @@ -414,7 +380,7 @@ function subentries2dom(subentries) { |
414 | 380 | fragment.append(subentry_div); |
415 | 381 | } |
416 | 382 | if (fragment.childNodes.length === 0) { |
417 | - return '<p>(brak schematów)</p>'; | |
383 | + return '<p>(' + gettext('brak schematów') + ')</p>'; | |
418 | 384 | } |
419 | 385 | return fragment; |
420 | 386 | } |
... | ... | @@ -436,7 +402,7 @@ function frame2dom(frame) { |
436 | 402 | var div = document.createElement('div'); |
437 | 403 | div.className = 'frame'; |
438 | 404 | var table = document.createElement('table'); |
439 | - table.className = 'table table-borderless border border-primary'; | |
405 | + table.className = 'table table-borderless border border-secondary'; | |
440 | 406 | var tbody = document.createElement('tbody'); |
441 | 407 | |
442 | 408 | // opinion |
... | ... | @@ -444,9 +410,9 @@ function frame2dom(frame) { |
444 | 410 | |
445 | 411 | // roles and selectional preferences |
446 | 412 | var roles_row = document.createElement('tr'); |
447 | - roles_row.innerHTML = '<td class="py-2 px-1">Rola:</td>'; | |
413 | + roles_row.innerHTML = '<td class="py-2 px-1">' + gettext('Rola') + ':</td>'; | |
448 | 414 | var preferences_row = document.createElement('tr'); |
449 | - var preferences_html = '<td class="py-2 px-1">Preferencje selekcyjne:</td>'; | |
415 | + var preferences_html = '<td class="py-2 px-1">' + gettext('Preferencje selekcyjne') + ':</td>'; | |
450 | 416 | for (var i in frame.arguments) { |
451 | 417 | var argument = frame.arguments[i]; |
452 | 418 | var cls = ''; |
... | ... | @@ -454,12 +420,12 @@ function frame2dom(frame) { |
454 | 420 | cls += ' phrase-' + argument.phrases[j]; |
455 | 421 | } |
456 | 422 | var data = ' data-argument_id="' + argument.id + '"'; |
457 | - roles_row.innerHTML += '<td class="py-2 px-1 border-top border-left border-primary' + cls + '"' + data + '>' + argument.str + '</td>'; | |
423 | + roles_row.innerHTML += '<td class="py-2 px-1 border-top border-left border-secondary' + cls + '"' + data + '>' + argument.str + '</td>'; | |
458 | 424 | |
459 | 425 | // don’t append to preferences_html.innerHTML since it automatically closes tags *** (?) |
460 | - preferences_html += '<td class="px-1 border-top border-left border-primary text-break' + cls + '"' + data + '>' | |
426 | + preferences_html += '<td class="px-1 border-top border-left border-secondary text-break' + cls + '"' + data + '>' | |
461 | 427 | for (var j in argument.preferences) { |
462 | - var cls = j > 0 ? ' border-top border-primary' : ''; | |
428 | + var cls = j > 0 ? ' border-top border-secondary' : ''; | |
463 | 429 | preferences_html += '<div class="preference py-2' + cls + '">' + argument.preferences[j] + '</div>'; |
464 | 430 | } |
465 | 431 | // *** and we want to close the <td> here |
... | ... | @@ -483,7 +449,7 @@ function frames2dom(frames) { |
483 | 449 | fragment.append(frame2dom(frames[i])); |
484 | 450 | } |
485 | 451 | if (fragment.childNodes.length == 0) { |
486 | - return '<p>(brak ram)</p>'; | |
452 | + return '<p>(' + gettext('brak ram') + ')</p>'; | |
487 | 453 | } |
488 | 454 | return fragment; |
489 | 455 | } |
... | ... | @@ -504,7 +470,7 @@ function get_schemata_and_frames(entry_id) { |
504 | 470 | var data = { 'forms' : serialize_forms($('#main-form')), 'entry' : entry_id }; |
505 | 471 | $.ajax({ |
506 | 472 | type : 'post', |
507 | - url : '/entries/get_entry/', | |
473 | + url : '/' + lang + '/entries/get_entry/', | |
508 | 474 | dataType : 'json', |
509 | 475 | data : data, |
510 | 476 | timeout : 60000, |
... | ... | @@ -530,7 +496,7 @@ function show_entries(entries) { |
530 | 496 | if (html != '') { |
531 | 497 | $('#entries').html(html); |
532 | 498 | } else { |
533 | - $('#entries').html('<tr><td>(brak haseł)</td></tr>'); | |
499 | + $('#entries').html('<tr><td>(' + gettext('brak haseł') + ')</td></tr>'); | |
534 | 500 | } |
535 | 501 | $('.entry').click(function() { |
536 | 502 | var selected_entry = $(this).data('entry'); |
... | ... |
entries/templates/entries.html
1 | 1 | {% extends "base.html" %} |
2 | 2 | |
3 | +{% load i18n %} | |
3 | 4 | {% load static %} |
4 | 5 | {% load crispy_forms_tags %} |
5 | 6 | |
... | ... | @@ -33,7 +34,7 @@ |
33 | 34 | <!-- left panel: list of entries --> |
34 | 35 | <div id="entries-list" class="col-2 h-100 overflow-auto border-right border-primary"> |
35 | 36 | <button type="button" id='filter-button' class="btn btn-primary" data-toggle="modal" data-target="#entry-filters"> |
36 | - Filtrowanie | |
37 | + {% trans "Filtrowanie" %} | |
37 | 38 | </button> |
38 | 39 | {% include "entries_list.html" %} |
39 | 40 | </div> |
... | ... | @@ -53,7 +54,7 @@ |
53 | 54 | <div class="modal-dialog modal-xl" role="document"> |
54 | 55 | <div class="modal-content"> |
55 | 56 | <div class="modal-header"> |
56 | - <h5 class="modal-title" id="entry-filtersLabel">Filtrowanie haseł</h5> | |
57 | + <h5 class="modal-title" id="entry-filtersLabel">{% trans "Filtrowanie haseł" %}</h5> | |
57 | 58 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"> |
58 | 59 | <span aria-hidden="true">×</span> |
59 | 60 | </button> |
... | ... |
entries/templates/entry_display.html
1 | +{% load i18n %} | |
2 | + | |
1 | 3 | <ul class="nav nav-tabs nav-justified sticky-top bg-light" id="entryTabs" role="tablist"> |
2 | 4 | <li class="nav-item"> |
3 | 5 | <a class="nav-link active" id="semantics-tab" data-toggle="tab" href="#semantics" role="tab" aria-controls="semantics" aria-selected="true"> |
4 | - Semantyka (ramy + schematy) | |
6 | + {% trans "Semantyka (ramy + schematy)" %} | |
5 | 7 | </a> |
6 | 8 | </li> |
7 | 9 | <li class="nav-item"> |
8 | 10 | <a class="nav-link" id="syntax-tab" data-toggle="tab" href="#syntax" role="tab" aria-controls="syntax" aria-selected="false"> |
9 | - Składnia (schematy) | |
11 | + {% trans "Składnia (schematy)" %} | |
10 | 12 | </a> |
11 | 13 | </li> |
12 | 14 | <li class="nav-item"> |
13 | 15 | <a class="nav-link" id="examples-tab" data-toggle="tab" href="#examples" role="tab" aria-controls="examples" aria-selected="false"> |
14 | - Przykłady niedopasowane | |
16 | + {% trans "Przykłady niedopasowane" %} | |
15 | 17 | </a> |
16 | 18 | </li> |
17 | 19 | </ul> |
... | ... |
entries/views.py
... | ... | @@ -254,7 +254,7 @@ def get_phrase_desc(phrase, position, negativity): |
254 | 254 | |
255 | 255 | def schema2dict(schema, phr2arg, negativity): |
256 | 256 | return { |
257 | - 'opinion' : SCHEMA_OPINION[schema.opinion.key], | |
257 | + 'opinion' : SCHEMA_OPINION()[schema.opinion.key], | |
258 | 258 | 'id' : str(schema.id), |
259 | 259 | 'positions' : [ |
260 | 260 | { |
... | ... | @@ -281,7 +281,7 @@ def get_prefs_list(argument): |
281 | 281 | |
282 | 282 | def frame2dict(frame, arg2phr): |
283 | 283 | return { |
284 | - 'opinion' : FRAME_OPINION[frame.opinion.key], | |
284 | + 'opinion' : FRAME_OPINION()[frame.opinion.key], | |
285 | 285 | 'id' : str(frame.id), |
286 | 286 | 'arguments' : [ |
287 | 287 | { |
... | ... |
locale/en/LC_MESSAGES/django.mo
0 → 100644
No preview for this file type
locale/en/LC_MESSAGES/django.po
0 → 100644
1 | +# SOME DESCRIPTIVE TITLE. | |
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
3 | +# This file is distributed under the same license as the PACKAGE package. | |
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
5 | +# | |
6 | +#, fuzzy | |
7 | +msgid "" | |
8 | +msgstr "" | |
9 | +"Project-Id-Version: PACKAGE VERSION\n" | |
10 | +"Report-Msgid-Bugs-To: \n" | |
11 | +"POT-Creation-Date: 2020-10-13 18:07+0200\n" | |
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | |
15 | +"Language: \n" | |
16 | +"MIME-Version: 1.0\n" | |
17 | +"Content-Type: text/plain; charset=UTF-8\n" | |
18 | +"Content-Transfer-Encoding: 8bit\n" | |
19 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" | |
20 | + | |
21 | +#: common/templates/base.html:42 | |
22 | +msgid "Hasła" | |
23 | +msgstr "Entries" | |
24 | + | |
25 | +#: common/templates/base.html:47 | |
26 | +msgid "Typy fraz" | |
27 | +msgstr "Phrase types" | |
28 | + | |
29 | +#: common/templates/base.html:52 | |
30 | +msgid "Statystyki" | |
31 | +msgstr "Statistics" | |
32 | + | |
33 | +#: common/templates/base.html:57 | |
34 | +msgid "Pobierz słownik" | |
35 | +msgstr "Download dictionary" | |
36 | + | |
37 | +#: common/templates/base.html:76 | |
38 | +msgid "EN" | |
39 | +msgstr "PL" | |
40 | + | |
41 | +#: entries/form_fields/specialised_fields.py:36 entries/forms.py:501 | |
42 | +msgid "Typ frazeologizmu" | |
43 | +msgstr "Phraseologism type" | |
44 | + | |
45 | +#: entries/form_fields/specialised_fields.py:36 | |
46 | +msgid "Typ frazy" | |
47 | +msgstr "Phrase type" | |
48 | + | |
49 | +#: entries/form_fields/specialised_fields.py:44 | |
50 | +msgid "wybierz" | |
51 | +msgstr "choose" | |
52 | + | |
53 | +#: entries/form_fields/specialised_fields.py:167 | |
54 | +msgid "Frazeologia" | |
55 | +msgstr "Phraseology" | |
56 | + | |
57 | +#: entries/form_fields/specialised_fields.py:168 entries/polish_strings.py:89 | |
58 | +msgid "dowolnie" | |
59 | +msgstr "any" | |
60 | + | |
61 | +#: entries/form_fields/specialised_fields.py:168 | |
62 | +msgid "zawiera" | |
63 | +msgstr "contains" | |
64 | + | |
65 | +#: entries/form_fields/specialised_fields.py:168 | |
66 | +msgid "nie zawiera" | |
67 | +msgstr "doesn’t contain" | |
68 | + | |
69 | +#: entries/forms.py:101 | |
70 | +msgid "Lub" | |
71 | +msgstr "Or" | |
72 | + | |
73 | +#: entries/forms.py:141 | |
74 | +msgid "Schemat" | |
75 | +msgstr "Schema" | |
76 | + | |
77 | +#: entries/forms.py:145 entries/forms.py:435 entries/forms.py:595 | |
78 | +#: entries/forms.py:709 entries/forms.py:711 entries/forms.py:713 | |
79 | +msgid "Fraza" | |
80 | +msgstr "Phrase" | |
81 | + | |
82 | +#: entries/forms.py:150 | |
83 | +msgid "Rama" | |
84 | +msgstr "Frame" | |
85 | + | |
86 | +#: entries/forms.py:156 | |
87 | +msgid "Własności hasła" | |
88 | +msgstr "Entry properties" | |
89 | + | |
90 | +#: entries/forms.py:157 | |
91 | +msgid "Własności składniowe" | |
92 | +msgstr "Syntactic properties" | |
93 | + | |
94 | +#: entries/forms.py:158 | |
95 | +msgid "Własności semantyczne" | |
96 | +msgstr "Semantic properties" | |
97 | + | |
98 | +#: entries/forms.py:159 | |
99 | +msgid "Filtruj" | |
100 | +msgstr "Filter" | |
101 | + | |
102 | +#: entries/forms.py:160 | |
103 | +msgid "Wyczyść" | |
104 | +msgstr "Reset" | |
105 | + | |
106 | +#: entries/forms.py:166 entries/forms.py:451 entries/forms.py:457 | |
107 | +#: entries/forms.py:496 | |
108 | +msgid "Lemat" | |
109 | +msgstr "Lemma" | |
110 | + | |
111 | +#: entries/forms.py:172 | |
112 | +msgid "Część mowy" | |
113 | +msgstr "Part of speech" | |
114 | + | |
115 | +#: entries/forms.py:186 | |
116 | +msgid "Liczba schematów" | |
117 | +msgstr "Number of schemata" | |
118 | + | |
119 | +#: entries/forms.py:190 | |
120 | +msgid "Liczba ram" | |
121 | +msgstr "Number of frames" | |
122 | + | |
123 | +#: entries/forms.py:193 | |
124 | +msgid "Typ frazy występujący w haśle." | |
125 | +msgstr "" | |
126 | + | |
127 | +#: entries/forms.py:194 | |
128 | +msgid "Ukryj niepasujące schematy" | |
129 | +msgstr "Hide non-matching schemata" | |
130 | + | |
131 | +#: entries/forms.py:195 | |
132 | +msgid "Ukryj niepasujące ramy" | |
133 | +msgstr "Hide non-matching frames" | |
134 | + | |
135 | +#: entries/forms.py:234 | |
136 | +msgid "Zwiń" | |
137 | +msgstr "Collapse" | |
138 | + | |
139 | +#: entries/forms.py:234 | |
140 | +msgid "Usuń" | |
141 | +msgstr "Remove" | |
142 | + | |
143 | +#: entries/forms.py:269 | |
144 | +msgid "Zaneguj" | |
145 | +msgstr "Negate" | |
146 | + | |
147 | +#: entries/forms.py:283 | |
148 | +msgid "Schemat składniowy" | |
149 | +msgstr "Syntactic schema" | |
150 | + | |
151 | +#: entries/forms.py:289 | |
152 | +msgid "Opinia o schemacie" | |
153 | +msgstr "Schema opinion" | |
154 | + | |
155 | +#: entries/forms.py:301 | |
156 | +msgid "Typ" | |
157 | +msgstr "Type" | |
158 | + | |
159 | +#: entries/forms.py:302 | |
160 | +msgid "zwykły" | |
161 | +msgstr "ordinary" | |
162 | + | |
163 | +#: entries/forms.py:302 | |
164 | +msgid "frazeologiczny" | |
165 | +msgstr "phraseological" | |
166 | + | |
167 | +#: entries/forms.py:310 | |
168 | +msgid "Zwrotność" | |
169 | +msgstr "Reflexiveness" | |
170 | + | |
171 | +#: entries/forms.py:383 entries/forms.py:590 | |
172 | +msgid "Pozycja" | |
173 | +msgstr "Position" | |
174 | + | |
175 | +#: entries/forms.py:399 | |
176 | +msgid "Pozycja składniowa" | |
177 | +msgstr "Syntactic position" | |
178 | + | |
179 | +#: entries/forms.py:405 | |
180 | +msgid "Funkcja gramatyczna" | |
181 | +msgstr "Grammatical function" | |
182 | + | |
183 | +#: entries/forms.py:415 | |
184 | +msgid "Kontrola" | |
185 | +msgstr "Control" | |
186 | + | |
187 | +#: entries/forms.py:425 | |
188 | +msgid "Kontrola predykatywna" | |
189 | +msgstr "Predicative control" | |
190 | + | |
191 | +#: entries/forms.py:434 | |
192 | +msgid "Typ frazy występujący na pozycji." | |
193 | +msgstr "" | |
194 | + | |
195 | +#: entries/forms.py:471 | |
196 | +msgid "Frazeologizm" | |
197 | +msgstr "Phraseologism" | |
198 | + | |
199 | +#: entries/forms.py:477 | |
200 | +msgid "Wybór lematów" | |
201 | +msgstr "Lemma choice" | |
202 | + | |
203 | +#: entries/forms.py:487 | |
204 | +msgid "Łączenie lematów" | |
205 | +msgstr "Lemma joining" | |
206 | + | |
207 | +#: entries/forms.py:500 entries/forms.py:739 | |
208 | +msgid "Typ składniowy frazeologizmu." | |
209 | +msgstr "" | |
210 | + | |
211 | +#: entries/forms.py:519 | |
212 | +msgid "Rama semantyczna" | |
213 | +msgstr "Semantic frame" | |
214 | + | |
215 | +#: entries/forms.py:525 | |
216 | +msgid "Opinia" | |
217 | +msgstr "Opinion" | |
218 | + | |
219 | +#: entries/forms.py:535 | |
220 | +msgid "Liczba argumentów" | |
221 | +msgstr "Number of arguments" | |
222 | + | |
223 | +#: entries/forms.py:542 | |
224 | +msgid "Liczba preferencyj selekcyjnych argumentu" | |
225 | +msgstr "Number of argument’s selectional preferences" | |
226 | + | |
227 | +#: entries/forms.py:548 | |
228 | +msgid "Argument" | |
229 | +msgstr "Argument" | |
230 | + | |
231 | +#: entries/forms.py:558 | |
232 | +msgid "Argument semantyczny" | |
233 | +msgstr "Semantic argument" | |
234 | + | |
235 | +#: entries/forms.py:564 | |
236 | +msgid "Rola" | |
237 | +msgstr "Role" | |
238 | + | |
239 | +#: entries/forms.py:573 | |
240 | +msgid "Atrybut roli" | |
241 | +msgstr "Role attribute" | |
242 | + | |
243 | +#: entries/forms.py:582 entries/forms.py:586 | |
244 | +msgid "Preferencja selekcyjna" | |
245 | +msgstr "Selectional preference" | |
246 | + | |
247 | +#: entries/forms.py:583 | |
248 | +msgid "Predefiniowana grupa znaczeń" | |
249 | +msgstr "Predefined meanings class" | |
250 | + | |
251 | +#: entries/forms.py:583 | |
252 | +msgid "Wyrażona przez relację" | |
253 | +msgstr "Expressed by relation" | |
254 | + | |
255 | +#: entries/forms.py:583 | |
256 | +msgid "Wyrażona przez jednostkę leksykalną Słowosieci" | |
257 | +msgstr "Expressed by plWordnet lexical unit" | |
258 | + | |
259 | +#: entries/forms.py:594 | |
260 | +msgid "Typ frazy, przez którą może być realizowany argument." | |
261 | +msgstr "" | |
262 | + | |
263 | +#: entries/forms.py:605 | |
264 | +msgid "Preferencja predefiniowana" | |
265 | +msgstr "Predefined preference" | |
266 | + | |
267 | +#: entries/forms.py:626 | |
268 | +msgid "Preferencja – relacja" | |
269 | +msgstr "Relational preference" | |
270 | + | |
271 | +#: entries/forms.py:632 | |
272 | +msgid "Relacja" | |
273 | +msgstr "Relation" | |
274 | + | |
275 | +#: entries/forms.py:642 | |
276 | +msgid "Do: rola" | |
277 | +msgstr "To: role" | |
278 | + | |
279 | +#: entries/forms.py:651 | |
280 | +msgid "Do: atrybut" | |
281 | +msgstr "To: attribute" | |
282 | + | |
283 | +#: entries/forms.py:666 | |
284 | +msgid "Preferencja – Słowosieć" | |
285 | +msgstr "plWordnet preference" | |
286 | + | |
287 | +#: entries/forms.py:672 | |
288 | +msgid "Jednostka leksykalna" | |
289 | +msgstr "Lexical unit" | |
290 | + | |
291 | +#: entries/forms.py:720 entries/polish_strings.py:114 | |
292 | +msgid "frazeologizm" | |
293 | +msgstr "phraseologism" | |
294 | + | |
295 | +#: entries/forms.py:735 | |
296 | +msgid "Fraza składowa frazeologizmu porównawczego." | |
297 | +msgstr "" | |
298 | + | |
299 | +#: entries/forms.py:737 | |
300 | +msgid "Fraza realizująca frazeologizm." | |
301 | +msgstr "" | |
302 | + | |
303 | +#: entries/polish_strings.py:5 | |
304 | +msgid "przymiotnik" | |
305 | +msgstr "adjective" | |
306 | + | |
307 | +#: entries/polish_strings.py:6 | |
308 | +msgid "przysłówek" | |
309 | +msgstr "adverb" | |
310 | + | |
311 | +#: entries/polish_strings.py:7 | |
312 | +msgid "rzeczownik" | |
313 | +msgstr "noun" | |
314 | + | |
315 | +#: entries/polish_strings.py:8 | |
316 | +msgid "czasownik" | |
317 | +msgstr "verb" | |
318 | + | |
319 | +#: entries/polish_strings.py:11 | |
320 | +msgid "dokonany" | |
321 | +msgstr "perfect" | |
322 | + | |
323 | +#: entries/polish_strings.py:11 | |
324 | +msgid "niedokonany" | |
325 | +msgstr "imperfect" | |
326 | + | |
327 | +#: entries/polish_strings.py:13 | |
328 | +msgid "zanegowany" | |
329 | +msgstr "negated" | |
330 | + | |
331 | +#: entries/polish_strings.py:13 | |
332 | +msgid "niezanegowany" | |
333 | +msgstr "not negated" | |
334 | + | |
335 | +#: entries/polish_strings.py:13 | |
336 | +msgid "dowolny" | |
337 | +msgstr "any" | |
338 | + | |
339 | +#: entries/polish_strings.py:15 | |
340 | +msgid "tak" | |
341 | +msgstr "yes" | |
342 | + | |
343 | +#: entries/polish_strings.py:15 | |
344 | +msgid "nie" | |
345 | +msgstr "no" | |
346 | + | |
347 | +#: entries/polish_strings.py:19 | |
348 | +msgid "wulgarny" | |
349 | +msgstr "vulgar" | |
350 | + | |
351 | +#: entries/polish_strings.py:20 | |
352 | +msgid "potoczny" | |
353 | +msgstr "colloquial" | |
354 | + | |
355 | +#: entries/polish_strings.py:21 | |
356 | +msgid "archaiczny" | |
357 | +msgstr "archaic" | |
358 | + | |
359 | +#: entries/polish_strings.py:22 | |
360 | +msgid "zły" | |
361 | +msgstr "bad" | |
362 | + | |
363 | +#: entries/polish_strings.py:23 | |
364 | +msgid "wątpliwy" | |
365 | +msgstr "uncertain" | |
366 | + | |
367 | +#: entries/polish_strings.py:24 | |
368 | +msgid "pewny" | |
369 | +msgstr "certain" | |
370 | + | |
371 | +#: entries/polish_strings.py:29 | |
372 | +msgid "wulgarna" | |
373 | +msgstr "vulgar" | |
374 | + | |
375 | +#: entries/polish_strings.py:30 | |
376 | +msgid "potoczna" | |
377 | +msgstr "colloquial" | |
378 | + | |
379 | +#: entries/polish_strings.py:31 | |
380 | +msgid "archaiczna" | |
381 | +msgstr "archaic" | |
382 | + | |
383 | +#: entries/polish_strings.py:32 | |
384 | +msgid "zła" | |
385 | +msgstr "bad" | |
386 | + | |
387 | +#: entries/polish_strings.py:33 | |
388 | +msgid "niepewna" | |
389 | +msgstr "uncertain" | |
390 | + | |
391 | +#: entries/polish_strings.py:34 | |
392 | +msgid "pewna" | |
393 | +msgstr "certain" | |
394 | + | |
395 | +#: entries/polish_strings.py:35 | |
396 | +msgid "sporadyczna" | |
397 | +msgstr "rare" | |
398 | + | |
399 | +#: entries/polish_strings.py:36 | |
400 | +msgid "dziedzinowa" | |
401 | +msgstr "domain-specific" | |
402 | + | |
403 | +#: entries/polish_strings.py:37 | |
404 | +msgid "metaforyczna" | |
405 | +msgstr "metaphorical" | |
406 | + | |
407 | +#: entries/polish_strings.py:38 | |
408 | +msgid "nieznana" | |
409 | +msgstr "unknown" | |
410 | + | |
411 | +#: entries/polish_strings.py:43 | |
412 | +msgid "podmiot" | |
413 | +msgstr "subject" | |
414 | + | |
415 | +#: entries/polish_strings.py:44 | |
416 | +msgid "dopełnienie" | |
417 | +msgstr "object" | |
418 | + | |
419 | +#: entries/polish_strings.py:45 | |
420 | +msgid "centrum" | |
421 | +msgstr "head" | |
422 | + | |
423 | +#: entries/polish_strings.py:50 entries/polish_strings.py:54 | |
424 | +msgid "kontrolujący" | |
425 | +msgstr "controller" | |
426 | + | |
427 | +#: entries/polish_strings.py:51 entries/polish_strings.py:55 | |
428 | +msgid "kontrolowany" | |
429 | +msgstr "controllee" | |
430 | + | |
431 | +#: entries/polish_strings.py:52 | |
432 | +msgid "kontrolujący #2" | |
433 | +msgstr "controller #2" | |
434 | + | |
435 | +#: entries/polish_strings.py:53 | |
436 | +msgid "kontrolowany #2" | |
437 | +msgstr "controllee #2" | |
438 | + | |
439 | +#: entries/polish_strings.py:60 | |
440 | +msgid "Przypadek" | |
441 | +msgstr "Case" | |
442 | + | |
443 | +#: entries/polish_strings.py:61 | |
444 | +msgid "Liczba" | |
445 | +msgstr "Number" | |
446 | + | |
447 | +#: entries/polish_strings.py:62 | |
448 | +msgid "Rodzaj" | |
449 | +msgstr "Gender" | |
450 | + | |
451 | +#: entries/polish_strings.py:63 | |
452 | +msgid "Stopień" | |
453 | +msgstr "Degree" | |
454 | + | |
455 | +#: entries/polish_strings.py:64 | |
456 | +msgid "Przyimek" | |
457 | +msgstr "Preposition" | |
458 | + | |
459 | +#: entries/polish_strings.py:65 | |
460 | +msgid "Przyimek złożony" | |
461 | +msgstr "Complex preposition" | |
462 | + | |
463 | +#: entries/polish_strings.py:66 | |
464 | +msgid "Inherentne <i>się</i>" | |
465 | +msgstr "Inherentne <i>się</i>" | |
466 | + | |
467 | +#: entries/polish_strings.py:67 | |
468 | +msgid "Zanegowanie" | |
469 | +msgstr "Negativity" | |
470 | + | |
471 | +#: entries/polish_strings.py:68 | |
472 | +msgid "Typ frazy zdaniowej" | |
473 | +msgstr "Clause type" | |
474 | + | |
475 | +#: entries/polish_strings.py:69 | |
476 | +msgid "Realizacje" | |
477 | +msgstr "Realisations" | |
478 | + | |
479 | +#: entries/polish_strings.py:70 | |
480 | +msgid "Aspekt" | |
481 | +msgstr "Aspect" | |
482 | + | |
483 | +#: entries/polish_strings.py:71 | |
484 | +msgid "Typ okolicznika" | |
485 | +msgstr "Adverbial type" | |
486 | + | |
487 | +#: entries/polish_strings.py:72 | |
488 | +msgid "Typ frazy porównawczej" | |
489 | +msgstr "Comparative phrase type" | |
490 | + | |
491 | +#: entries/polish_strings.py:73 | |
492 | +msgid "Postać frazeologizmu" | |
493 | +msgstr "Phraseologism text" | |
494 | + | |
495 | +#: entries/polish_strings.py:78 | |
496 | +msgid "strukturalny" | |
497 | +msgstr "structural" | |
498 | + | |
499 | +#: entries/polish_strings.py:79 | |
500 | +msgid "mianownik" | |
501 | +msgstr "nominative" | |
502 | + | |
503 | +#: entries/polish_strings.py:80 | |
504 | +msgid "dopełniacz" | |
505 | +msgstr "genitive" | |
506 | + | |
507 | +#: entries/polish_strings.py:81 | |
508 | +msgid "celownik" | |
509 | +msgstr "dative" | |
510 | + | |
511 | +#: entries/polish_strings.py:82 | |
512 | +msgid "biernik" | |
513 | +msgstr "accusative" | |
514 | + | |
515 | +#: entries/polish_strings.py:83 | |
516 | +msgid "narzędnik" | |
517 | +msgstr "instrumental" | |
518 | + | |
519 | +#: entries/polish_strings.py:84 | |
520 | +msgid "miejscownik" | |
521 | +msgstr "locative" | |
522 | + | |
523 | +#: entries/polish_strings.py:85 | |
524 | +msgid "predykatywny" | |
525 | +msgstr "predicative" | |
526 | + | |
527 | +#: entries/polish_strings.py:86 | |
528 | +msgid "partytytwny" | |
529 | +msgstr "partitive" | |
530 | + | |
531 | +#: entries/polish_strings.py:87 | |
532 | +msgid "poprzyimkowy" | |
533 | +msgstr "postprepositional" | |
534 | + | |
535 | +#: entries/polish_strings.py:88 | |
536 | +msgid "uzgodnienie" | |
537 | +msgstr "agreement" | |
538 | + | |
539 | +#: entries/polish_strings.py:90 | |
540 | +msgid "pojedyncza" | |
541 | +msgstr "singular" | |
542 | + | |
543 | +#: entries/polish_strings.py:91 | |
544 | +msgid "mnoga" | |
545 | +msgstr "plural" | |
546 | + | |
547 | +#: entries/polish_strings.py:92 | |
548 | +msgid "męski osobowy" | |
549 | +msgstr "masculine personal" | |
550 | + | |
551 | +#: entries/polish_strings.py:93 | |
552 | +msgid "męski żywotny" | |
553 | +msgstr "masculine animate" | |
554 | + | |
555 | +#: entries/polish_strings.py:94 | |
556 | +msgid "męski nieżywotny" | |
557 | +msgstr "masculine inanimate" | |
558 | + | |
559 | +#: entries/polish_strings.py:95 | |
560 | +msgid "żeński" | |
561 | +msgstr "feminine" | |
562 | + | |
563 | +#: entries/polish_strings.py:96 | |
564 | +msgid "nijaki" | |
565 | +msgstr "neuter" | |
566 | + | |
567 | +#: entries/polish_strings.py:97 | |
568 | +msgid "równy" | |
569 | +msgstr "positive" | |
570 | + | |
571 | +#: entries/polish_strings.py:98 | |
572 | +msgid "wyższy" | |
573 | +msgstr "comparative" | |
574 | + | |
575 | +#: entries/polish_strings.py:99 | |
576 | +msgid "najwyższy" | |
577 | +msgstr "superlative" | |
578 | + | |
579 | +#: entries/polish_strings.py:104 | |
580 | +msgid "przymiotnikowa" | |
581 | +msgstr "adjectival" | |
582 | + | |
583 | +#: entries/polish_strings.py:105 | |
584 | +msgid "przysłówkowa" | |
585 | +msgstr "adverbial" | |
586 | + | |
587 | +#: entries/polish_strings.py:106 | |
588 | +msgid "porównawcza" | |
589 | +msgstr "comparative" | |
590 | + | |
591 | +#: entries/polish_strings.py:107 | |
592 | +msgid "przyimkowa z przyimkiem złożonym" | |
593 | +msgstr "prepositional with complex preposition" | |
594 | + | |
595 | +#: entries/polish_strings.py:108 | |
596 | +msgid "zdaniowa" | |
597 | +msgstr "clause" | |
598 | + | |
599 | +#: entries/polish_strings.py:109 | |
600 | +msgid "dystrybutywna" | |
601 | +msgstr "distributive" | |
602 | + | |
603 | +#: entries/polish_strings.py:111 | |
604 | +msgid "podmiot czasownika wymagającego bezokolicznika" | |
605 | +msgstr "" | |
606 | + | |
607 | +#: entries/polish_strings.py:112 | |
608 | +msgid "frazeologizm zamrożony" | |
609 | +msgstr "fixed phraseologism" | |
610 | + | |
611 | +#: entries/polish_strings.py:113 | |
612 | +msgid "bezokolicznikowa" | |
613 | +msgstr "infinitival" | |
614 | + | |
615 | +#: entries/polish_strings.py:115 | |
616 | +msgid "zdaniowa z korelatem" | |
617 | +msgstr "clause with a correlate" | |
618 | + | |
619 | +#: entries/polish_strings.py:116 | |
620 | +msgid "niechromatyczna" | |
621 | +msgstr "nonchromatic" | |
622 | + | |
623 | +#: entries/polish_strings.py:117 | |
624 | +msgid "rzeczownikowa" | |
625 | +msgstr "nominal" | |
626 | + | |
627 | +#: entries/polish_strings.py:118 | |
628 | +msgid "liczebnikowa" | |
629 | +msgstr "numeral" | |
630 | + | |
631 | +#: entries/polish_strings.py:119 | |
632 | +msgid "mowa niezależna" | |
633 | +msgstr "direct speech" | |
634 | + | |
635 | +#: entries/polish_strings.py:120 | |
636 | +msgid "posesywna" | |
637 | +msgstr "possesive" | |
638 | + | |
639 | +#: entries/polish_strings.py:121 | |
640 | +msgid "imiesłowowa" | |
641 | +msgstr "participal" | |
642 | + | |
643 | +#: entries/polish_strings.py:122 | |
644 | +msgid "przyimkowo-przymiotnikowa" | |
645 | +msgstr "adjectival-prepositional" | |
646 | + | |
647 | +#: entries/polish_strings.py:123 | |
648 | +msgid "przyimkowo-odsłownikowa" | |
649 | +msgstr "gerundial-prepositional" | |
650 | + | |
651 | +#: entries/polish_strings.py:124 | |
652 | +msgid "zdaniowa z korelatem przyimkowym" | |
653 | +msgstr "clause with a prepositional correlate" | |
654 | + | |
655 | +#: entries/polish_strings.py:125 | |
656 | +msgid "przyimkowo-rzeczownikowa" | |
657 | +msgstr "nominal-prepositional" | |
658 | + | |
659 | +#: entries/polish_strings.py:126 | |
660 | +msgid "przyimkowo-liczebnikowa" | |
661 | +msgstr "numeral-prepositional" | |
662 | + | |
663 | +#: entries/polish_strings.py:127 | |
664 | +msgid "przyimkowo-imiesłowowa" | |
665 | +msgstr "participal-prepositional" | |
666 | + | |
667 | +#: entries/polish_strings.py:128 | |
668 | +msgid "partykuła" | |
669 | +msgstr "particle" | |
670 | + | |
671 | +#: entries/polish_strings.py:129 | |
672 | +msgid "wzajemnościowa partykuła się" | |
673 | +msgstr "reciprocal się particle" | |
674 | + | |
675 | +#: entries/polish_strings.py:130 | |
676 | +msgid "zwrotna partykuła się" | |
677 | +msgstr "reflexive się particle" | |
678 | + | |
679 | +#: entries/polish_strings.py:131 | |
680 | +msgid "okolicznikowa" | |
681 | +msgstr "adverbial" | |
682 | + | |
683 | +#: entries/polish_strings.py:141 | |
684 | +msgid "lub" | |
685 | +msgstr "or" | |
686 | + | |
687 | +#: entries/polish_strings.py:142 | |
688 | +msgid "wyłącznie" | |
689 | +msgstr "exclusively" | |
690 | + | |
691 | +#: entries/polish_strings.py:147 | |
692 | +msgid "szeregowo (bez spójnika)" | |
693 | +msgstr "concatenation (no conjunction)" | |
694 | + | |
695 | +#: entries/polish_strings.py:148 | |
696 | +msgid "koordynacja (ze spójnikiem)" | |
697 | +msgstr "coordination (with conjunction)" | |
698 | + | |
699 | +#: entries/templates/entries.html:37 | |
700 | +msgid "Filtrowanie" | |
701 | +msgstr "Filtering" | |
702 | + | |
703 | +#: entries/templates/entries.html:57 | |
704 | +msgid "Filtrowanie haseł" | |
705 | +msgstr "Entry filtering" | |
706 | + | |
707 | +#: entries/templates/entry_display.html:6 | |
708 | +msgid "Semantyka (ramy + schematy)" | |
709 | +msgstr "Semantics (frames + schemata)" | |
710 | + | |
711 | +#: entries/templates/entry_display.html:11 | |
712 | +msgid "Składnia (schematy)" | |
713 | +msgstr "Syntax (schemata)" | |
714 | + | |
715 | +#: entries/templates/entry_display.html:16 | |
716 | +msgid "Przykłady niedopasowane" | |
717 | +msgstr "Unmatched examples" | |
... | ... |
locale/en/LC_MESSAGES/djangojs.mo
0 → 100644
No preview for this file type
locale/en/LC_MESSAGES/djangojs.po
0 → 100644
1 | +# SOME DESCRIPTIVE TITLE. | |
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
3 | +# This file is distributed under the same license as the PACKAGE package. | |
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
5 | +# | |
6 | +#, fuzzy | |
7 | +msgid "" | |
8 | +msgstr "" | |
9 | +"Project-Id-Version: PACKAGE VERSION\n" | |
10 | +"Report-Msgid-Bugs-To: \n" | |
11 | +"POT-Creation-Date: 2020-10-13 18:07+0200\n" | |
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | |
15 | +"Language: \n" | |
16 | +"MIME-Version: 1.0\n" | |
17 | +"Content-Type: text/plain; charset=UTF-8\n" | |
18 | +"Content-Transfer-Encoding: 8bit\n" | |
19 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" | |
20 | + | |
21 | +#: entries/static/entries/js/entries.js:60 | |
22 | +msgid "Formularz filtrowania zawiera błędy." | |
23 | +msgstr "The filtering form contains errors." | |
24 | + | |
25 | +#: entries/static/entries/js/entries.js:101 | |
26 | +msgid "zwiń" | |
27 | +msgstr "collapse" | |
28 | + | |
29 | +#: entries/static/entries/js/entries.js:106 | |
30 | +msgid "rozwiń" | |
31 | +msgstr "expand" | |
32 | + | |
33 | +#: entries/static/entries/js/entries.js:143 | |
34 | +msgid "LUB" | |
35 | +msgstr "OR" | |
36 | + | |
37 | +#: entries/static/entries/js/entries.js:143 | |
38 | +msgid "Usuń" | |
39 | +msgstr "Remove" | |
40 | + | |
41 | +#: entries/static/entries/js/entries.js:298 | |
42 | +msgid "Opinia" | |
43 | +msgstr "Opinion" | |
44 | + | |
45 | +#: entries/static/entries/js/entries.js:321 | |
46 | +msgid "Funkcja" | |
47 | +msgstr "Function" | |
48 | + | |
49 | +#: entries/static/entries/js/entries.js:323 | |
50 | +msgid "Typy fraz" | |
51 | +msgstr "Phrase types" | |
52 | + | |
53 | +#: entries/static/entries/js/entries.js:383 | |
54 | +msgid "brak schematów" | |
55 | +msgstr "no schemata" | |
56 | + | |
57 | +#: entries/static/entries/js/entries.js:413 | |
58 | +msgid "Rola" | |
59 | +msgstr "Role" | |
60 | + | |
61 | +#: entries/static/entries/js/entries.js:415 | |
62 | +msgid "Preferencje selekcyjne" | |
63 | +msgstr "Selectional preferences" | |
64 | + | |
65 | +#: entries/static/entries/js/entries.js:452 | |
66 | +msgid "brak ram" | |
67 | +msgstr "no frames" | |
68 | + | |
69 | +#: entries/static/entries/js/entries.js:499 | |
70 | +msgid "brak haseł" | |
71 | +msgstr "no entries" | |
... | ... |
shellvalier/urls.py
1 | -"""shellvalier URL Configuration | |
2 | - | |
3 | -The `urlpatterns` list routes URLs to views. For more information please see: | |
4 | - https://docs.djangoproject.com/en/2.1/topics/http/urls/ | |
5 | -Examples: | |
6 | -Function views | |
7 | - 1. Add an import: from my_app import views | |
8 | - 2. Add a URL to urlpatterns: path('', views.home, name='home') | |
9 | -Class-based views | |
10 | - 1. Add an import: from other_app.views import Home | |
11 | - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') | |
12 | -Including another URLconf | |
13 | - 1. Import the include() function: from django.urls import include, path | |
14 | - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) | |
15 | -""" | |
1 | +from django.conf.urls.i18n import i18n_patterns | |
16 | 2 | from django.contrib import admin |
17 | 3 | from django.urls import include, path |
18 | 4 | |
5 | +from django.views.i18n import JavaScriptCatalog | |
6 | + | |
19 | 7 | from common.views import dash, error_400, error_404 |
20 | 8 | |
21 | -urlpatterns = [ | |
9 | +# prepend non default-language to the urls | |
10 | +urlpatterns = i18n_patterns( | |
22 | 11 | path('entries/', include('entries.urls')), |
23 | 12 | path('phrase_expansions/', include('phrase_expansions.urls')), |
24 | 13 | path('dictionary_statistics/', include('dictionary_statistics.urls')), |
25 | 14 | path('download/', include('download.urls')), |
15 | + path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'), | |
26 | 16 | path('admin/', admin.site.urls, name='admin'), |
27 | 17 | path('', dash, name='dash'), |
28 | -] | |
18 | + # uncomment to leave default (Polish) urls unchanged | |
19 | + #prefix_default_language=False, | |
20 | +) | |
29 | 21 | |
30 | -handler400 = error_400 | |
31 | -handler404 = error_404 | |
22 | +#handler400 = error_400 | |
23 | +#handler404 = error_404 | |
... | ... |
update_translations.sh
0 → 100755
1 | +django-admin makemessages -a | |
2 | +django-admin makemessages -d djangojs -a | |
3 | + | |
4 | +echo | |
5 | +echo '***' | |
6 | +echo 'now update your translations in:' | |
7 | +echo ' -> locale/en/LC_MESSAGES/django.po' | |
8 | +echo ' -> locale/en/LC_MESSAGES/djangojs.po' | |
9 | +echo 'and run ./compile_translations.sh to apply them' | |
10 | +echo '***' | |
11 | +echo | |
... | ... |