Merge pull request #3989 from emanuelschuetze/i18n
Updated German translations and translatable strings
This commit is contained in:
commit
acce79a1c6
@ -9,7 +9,8 @@
|
||||
"lint": "ng lint",
|
||||
"e2e": "ng e2e",
|
||||
"compodoc": "./node_modules/.bin/compodoc --hideGenerator -p src/tsconfig.app.json -n 'OpenSlides Documentation' -d ../Compodoc -s -w -t -o --port",
|
||||
"extract": "ngx-translate-extract -i ./src -o ./src/assets/i18n/{en,de,fr}.json --clean --sort --format-indentation ' ' --format namespaced-json",
|
||||
"extract": "ngx-translate-extract -i ./src -o ./src/assets/i18n/template-en.pot -clean --sort --format pot -m _",
|
||||
"po2json": "./node_modules/.bin/po2json -f mf src/assets/i18n/de.po src/assets/i18n/de.json && ./node_modules/.bin/po2json -f mf src/assets/i18n/cs.po src/assets/i18n/cs.json",
|
||||
"prettify": "pretty-quick"
|
||||
},
|
||||
"private": true,
|
||||
@ -32,6 +33,7 @@
|
||||
"file-saver": "^2.0.0-rc.3",
|
||||
"material-design-icons": "^3.0.1",
|
||||
"ngx-mat-select-search": "^1.4.0",
|
||||
"po2json": "^1.0.0-alpha",
|
||||
"roboto-fontface": "^0.10.0",
|
||||
"rxjs": "^6.3.3",
|
||||
"uuid": "^3.3.2",
|
||||
@ -47,6 +49,7 @@
|
||||
"@types/jasmine": "^2.8.9",
|
||||
"@types/jasminewd2": "^2.0.5",
|
||||
"@types/node": "~8.9.4",
|
||||
"@types/yargs": "^12.0.1",
|
||||
"codelyzer": "~4.2.1",
|
||||
"husky": "^0.14.3",
|
||||
"jasmine-core": "~2.99.1",
|
||||
|
@ -33,7 +33,7 @@ export class AppComponent {
|
||||
constantsService: ConstantsService // Needs to be started, so it can register itself to the WebsocketService
|
||||
) {
|
||||
// manually add the supported languages
|
||||
translate.addLangs(['en', 'de', 'fr']);
|
||||
translate.addLangs(['en', 'de', 'cs']);
|
||||
// this language will be used as a fallback when a translation isn't found in the current language
|
||||
translate.setDefaultLang('en');
|
||||
// get the browsers default language
|
||||
|
305
client/src/app/core/marked-translations.ts
Normal file
305
client/src/app/core/marked-translations.ts
Normal file
@ -0,0 +1,305 @@
|
||||
import { _ } from '@biesbjerg/ngx-translate-extract';
|
||||
|
||||
/**
|
||||
* Add strings here that require translations but have never been declared
|
||||
* in code nor views.
|
||||
*
|
||||
* I.e: words transmitted by the server
|
||||
*
|
||||
* @example
|
||||
* ```ts
|
||||
* _('my new sentence to translate that has not been anywhere');
|
||||
* ```
|
||||
*/
|
||||
|
||||
// Core config strings
|
||||
_('Presentation and assembly system');
|
||||
_('Event name');
|
||||
_('<a href="http://www.openslides.org">OpenSlides</a> is a free ' +
|
||||
'web based presentation and assembly system for visualizing ' +
|
||||
'and controlling agenda, motions and elections of an ' +
|
||||
'assembly.');
|
||||
_('General');
|
||||
_('Event');
|
||||
_('Short description of event');
|
||||
_('Event date');
|
||||
_('Event location');
|
||||
_('Event organizer');
|
||||
_('Front page title');
|
||||
_('Welcome to OpenSlides');
|
||||
_('Front page text');
|
||||
_('[Space for your welcome text.]');
|
||||
_('System');
|
||||
_('Allow access for anonymous guest users');
|
||||
_('Show this text on the login page');
|
||||
_('Export');
|
||||
_('Separator used for all csv exports and examples');
|
||||
_('Page number alignment in PDF');
|
||||
_('Left');
|
||||
_('Center');
|
||||
_('Right');
|
||||
_('Standard font size in PDF');
|
||||
|
||||
// Projector config strings
|
||||
_('Projector');
|
||||
_('Projector language');
|
||||
_('Current browser language');
|
||||
_('Show logo on projector');
|
||||
_('You can replace the logo by uploading an image and set it as the "Projector logo" in "files".');
|
||||
_('Show the clock on projector');
|
||||
_('Show title and description of event on projector');
|
||||
_('Display header and footer');
|
||||
_('Background color of projector header and footer');
|
||||
_('Font color of projector header and footer');
|
||||
_('Font color of projector headline');
|
||||
_('Predefined seconds of new countdowns');
|
||||
_('Color for blanked projector');
|
||||
_('Default projector');
|
||||
_('Custom translations');
|
||||
_('List of speakers overlay');
|
||||
_('Projector logo');
|
||||
_('Projector header image');
|
||||
_('PDF header logo (left)');
|
||||
_('PDF header logo (right)');
|
||||
_('PDF footer logo (left)');
|
||||
_('PDF footer logo (right)');
|
||||
_('Web interface header logo');
|
||||
_('PDF ballot paper logo');
|
||||
|
||||
// Agenda config strings
|
||||
_('Enable numbering for agenda items');
|
||||
_('Numbering prefix for agenda items');
|
||||
_('This prefix will be set if you run the automatic agenda numbering.');
|
||||
_('Agenda');
|
||||
_('Invalid input.');
|
||||
_('Numeral system for agenda items');
|
||||
_('Arabic');
|
||||
_('Roman');
|
||||
_('Begin of event');
|
||||
_('Input format: DD.MM.YYYY HH:MM');
|
||||
_('Hide internal items when projecting subitems');
|
||||
_('Number of last speakers to be shown on the projector');
|
||||
_('List of speakers');
|
||||
_('Show orange countdown in the last x seconds of speaking time');
|
||||
_('Enter duration in seconds. Choose 0 to disable warning color.');
|
||||
_('Couple countdown with the list of speakers');
|
||||
_('[Begin speech] starts the countdown, [End speech] stops the countdown.');
|
||||
_('Agenda visibility');
|
||||
_('Default visibility for new agenda items (except topics)');
|
||||
_('Public item');
|
||||
_('Internal item');
|
||||
_('Hidden item');
|
||||
|
||||
|
||||
// Motions config strings
|
||||
// subgroup general
|
||||
_('General');
|
||||
_('Workflow of new motions');
|
||||
_('Numbered per category');
|
||||
_('Serially numbered');
|
||||
_('Set it manually');
|
||||
_('Motion preamble');
|
||||
_('The assembly may decide:');
|
||||
_('Default line numbering');
|
||||
_('disabled');
|
||||
_('Line length');
|
||||
_('The maximum number of characters per line. Relevant when line numbering is enabled. Min: 40');
|
||||
_('Hide reason on projector');
|
||||
_('Hide meta information box on projector');
|
||||
_('Hide recommendation on projector');
|
||||
_('Stop submitting new motions by non-staff users');
|
||||
_('Allow to disable versioning');
|
||||
_('Name of recommender');
|
||||
_('Will be displayed as label before selected recommendation. Use an empty value to disable the recommendation system.');
|
||||
_('Default text version for change recommendations');
|
||||
// subgroup Amendments
|
||||
_('Amendments');
|
||||
_('Activate amendments');
|
||||
_('Show amendments together with motions');
|
||||
_('Prefix for the identifier for amendments');
|
||||
_('The title of the motion is always applied.');
|
||||
_('How to create new amendments');
|
||||
_('Empty text field');
|
||||
_('Edit the whole motion text');
|
||||
_('Paragraph-based, Diff-enabled');
|
||||
// subgroup Supporters
|
||||
_('Supporters');
|
||||
_('Number of (minimum) required supporters for a motion');
|
||||
_('Choose 0 to disable the supporting system.');
|
||||
_('Remove all supporters of a motion if a submitter edits his motion in early state');
|
||||
// subgroup Voting and ballot papers
|
||||
_('Voting and ballot papers');
|
||||
_('The 100 % base of a voting result consists of');
|
||||
_('Yes/No/Abstain');
|
||||
_('Yes/No');
|
||||
_('All valid ballots');
|
||||
_('All casted ballots');
|
||||
_('Disabled (no percents)');
|
||||
_('Required majority');
|
||||
_('Default method to check whether a motion has reached the required majority.');
|
||||
_('Simple majority');
|
||||
_('Two-thirds majority');
|
||||
_('Three-quarters majority');
|
||||
_('Disabled');
|
||||
_('Number of ballot papers (selection)');
|
||||
_('Number of all delegates');
|
||||
_('Number of all participants');
|
||||
_('Use the following custom number');
|
||||
_('Custom number of ballot papers');
|
||||
// subgroup export
|
||||
_('Title for PDF and DOCX documents (all motions)');
|
||||
_('Preamble text for PDF and DOCX documents (all motions)');
|
||||
_('Sort categories by');
|
||||
_('Include the sequential number in PDF and DOCX');
|
||||
// misc motion strings
|
||||
_('needed');
|
||||
_('Amendment');
|
||||
_('Amendment to');
|
||||
// motion workflow 1
|
||||
_('Simple Workflow');
|
||||
_('submitted');
|
||||
_('accepted');
|
||||
_('Accept');
|
||||
_('Acceptance');
|
||||
_('rejected');
|
||||
_('Reject');
|
||||
_('Rejection');
|
||||
_('not decided');
|
||||
_('Do not decide');
|
||||
_('No decision');
|
||||
// motion workflow 2
|
||||
_('Complex Workflow');
|
||||
_('published');
|
||||
_('permitted');
|
||||
_('Permit');
|
||||
_('Permission');
|
||||
_('accepted');
|
||||
_('Accept');
|
||||
_('Acceptance');
|
||||
_('rejected');
|
||||
_('Reject');
|
||||
_('Rejection');
|
||||
_('withdrawed');
|
||||
_('Withdraw');
|
||||
_('adjourned');
|
||||
_('Adjourn');
|
||||
_('Adjournment');
|
||||
_('not concerned');
|
||||
_('Do not concern');
|
||||
_('No concernment');
|
||||
_('refered to committee');
|
||||
_('Refer to committee');
|
||||
_('Referral to committee');
|
||||
_('needs review');
|
||||
_('Needs review');
|
||||
_('rejected (not authorized)');
|
||||
_('Reject (not authorized)');
|
||||
_('Rejection (not authorized)');
|
||||
|
||||
// Assignment config strings
|
||||
_('Election method');
|
||||
_('Automatic assign of method');
|
||||
_('Always one option per candidate');
|
||||
_('Always Yes-No-Abstain per candidate');
|
||||
_('Always Yes/No per candidate');
|
||||
_('Elections');
|
||||
_('Ballot and ballot papers');
|
||||
_('The 100-%-base of an election result consists of');
|
||||
_('For Yes/No/Abstain per candidate and Yes/No per candidate the 100-%-base ' +
|
||||
'depends on the election method: If there is only one option per candidate, ' +
|
||||
'the sum of all votes of all candidates is 100 %. Otherwise for each ' +
|
||||
'candidate the sum of all votes is 100 %.');
|
||||
_('Yes/No/Abstain per candidate');
|
||||
_('Yes/No per candidate');
|
||||
_('All valid ballots');
|
||||
_('All casted ballots');
|
||||
_('Disabled (no percents)');
|
||||
_('Number of ballot papers (selection)');
|
||||
_('Number of all delegates');
|
||||
_('Number of all participants');
|
||||
_('Use the following custom number');
|
||||
_('Custom number of ballot papers');
|
||||
_('Required majority');
|
||||
_('Default method to check whether a candidate has reached the required majority.');
|
||||
_('Simple majority');
|
||||
_('Two-thirds majority');
|
||||
_('Three-quarters majority');
|
||||
_('Disabled');
|
||||
_('Put all candidates on the list of speakers');
|
||||
_('Title for PDF document (all elections)');
|
||||
_('Preamble text for PDF document (all elections)');
|
||||
//other translations
|
||||
_('Searching for candidates');
|
||||
_('Voting');
|
||||
_('Finished');
|
||||
|
||||
// Users
|
||||
// permission strings (see models.py of each Django app)
|
||||
// agenda
|
||||
_('Can see agenda');
|
||||
_('Can manage agenda');
|
||||
_('Can manage list of speakers');
|
||||
_('Can see internal items and time scheduling of agenda');
|
||||
_('Can put oneself on the list of speakers');
|
||||
// assignments
|
||||
_('Can see elections');
|
||||
_('Can nominate another participant');
|
||||
_('Can nominate oneself');
|
||||
_('Can manage elections');
|
||||
// core
|
||||
_('Can see the projector');
|
||||
_('Can manage the projector');
|
||||
_('Can see the front page');
|
||||
_('Can manage tags');
|
||||
_('Can manage configuration');
|
||||
_('Can use the chat');
|
||||
_('Can manage the chat');
|
||||
_('Can manage logos and fonts');
|
||||
// mediafiles
|
||||
_('Can see the list of files');
|
||||
_('Can upload files');
|
||||
_('Can manage files');
|
||||
_('Can see hidden files');
|
||||
// motions
|
||||
_('Can see motions');
|
||||
_('Can create motions');
|
||||
_('Can support motions');
|
||||
_('Can manage motions');
|
||||
_('Can see comments');
|
||||
_('Can manage comments');
|
||||
// users
|
||||
_('Can see names of users');
|
||||
_('Can see extra data of users (e.g. present and comment)');
|
||||
_('Can manage users');
|
||||
|
||||
// users config strings
|
||||
_('General');
|
||||
_('Sort name of participants by');
|
||||
_('Enable participant presence view');
|
||||
_('Participants');
|
||||
_('Given name');
|
||||
_('Surname');
|
||||
_('PDF');
|
||||
_('Welcome to OpenSlides');
|
||||
_('Title for access data and welcome PDF');
|
||||
_('[Place for your welcome and help text.]');
|
||||
_('Help text for access data and welcome PDF');
|
||||
_('System URL');
|
||||
_('Used for QRCode in PDF of access data.');
|
||||
_('WLAN name (SSID)');
|
||||
_('Used for WLAN QRCode in PDF of access data.');
|
||||
_('WLAN password');
|
||||
_('Used for WLAN QRCode in PDF of access data.');
|
||||
_('WLAN encryption');
|
||||
_('Used for WLAN QRCode in PDF of access data.');
|
||||
_('WEP');
|
||||
_('WPA/WPA2');
|
||||
_('No encryption');
|
||||
_('Email');
|
||||
_('Email sender');
|
||||
_('Email subject');
|
||||
_('Your login for {event_name}');
|
||||
_('You can use {event_name} as a placeholder.');
|
||||
_('Email body');
|
||||
_('Dear {name},\n\nthis is your OpenSlides login for the event {event_name}:\n\n {url}\n username: {username}\n password: {password}\n\nThis email was generated automatically.');
|
||||
_('Use these placeholders: {name}, {event_name}, {url}, {username}, {password}. The url referrs to the system url.');
|
@ -1,12 +1,12 @@
|
||||
<mat-toolbar color='primary' class="footer">
|
||||
<mat-toolbar-row>
|
||||
<button mat-button class="footer-link" [routerLink]=legalNoticeUrl>
|
||||
<span translate>Legal Notice</span>
|
||||
<span translate>Legal notice</span>
|
||||
</button>
|
||||
<button mat-button class="footer-link" [routerLink]=privacyPolicyUrl>
|
||||
<span translate>Privacy Policy</span>
|
||||
<span translate>Privacy policy</span>
|
||||
</button>
|
||||
<span class="footer-right">© <span translate>Copyright by</span> <a href='https://openslides.org/'>OpenSlides</a>
|
||||
<span class="footer-right">© <span>Copyright by</span> <a href='https://openslides.org/'>OpenSlides</a>
|
||||
</span>
|
||||
</mat-toolbar-row>
|
||||
</mat-toolbar>
|
||||
|
@ -55,7 +55,7 @@ interface VersionResponse {
|
||||
}
|
||||
|
||||
/**
|
||||
* Shared component to hold the content of the Legal Notice.
|
||||
* Shared component to hold the content of the Legal notice.
|
||||
* Used in login and site container.
|
||||
*/
|
||||
@Component({
|
||||
|
@ -12,7 +12,7 @@
|
||||
</mat-form-field>
|
||||
<div *ngIf="dispSelected">
|
||||
<p>
|
||||
<span translate>Selected Values</span>:
|
||||
<span translate>Selected values</span>:
|
||||
</p>
|
||||
<mat-chip-list #chipList>
|
||||
<mat-chip *ngFor="let selectedItem of thisSelector?.value" (removed)="remove(selectedItem)">{{selectedItem.name}}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<os-head-bar plusButton=true (plusButtonClicked)=onPlusButton()>
|
||||
<!-- Title -->
|
||||
<div class="title-slot">
|
||||
<h2 translate>Assignments</h2>
|
||||
<h2 translate>Elections</h2>
|
||||
</div>
|
||||
|
||||
<!-- Menu -->
|
||||
|
@ -1,6 +1,6 @@
|
||||
<os-head-bar [nav]=false [goBack]=true>
|
||||
<div class="title-slot">
|
||||
<h2 translate>Legal Notice</h2>
|
||||
<h2 translate>Legal notice</h2>
|
||||
</div>
|
||||
</os-head-bar>
|
||||
|
||||
|
@ -18,8 +18,8 @@
|
||||
</ng-container>
|
||||
|
||||
<!-- required for all kinds of input -->
|
||||
<mat-label translate>{{ configItem.label }}</mat-label>
|
||||
<mat-hint *ngIf="configItem.helpText" translate>{{ configItem.helpText }}</mat-hint>
|
||||
<mat-label>{{ configItem.label | translate }}</mat-label>
|
||||
<mat-hint *ngIf="configItem.helpText">{{ configItem.helpText | translate }}</mat-hint>
|
||||
<span matSuffix>
|
||||
<mat-icon pull="right" class="text-success" *ngIf="updateSuccessIcon">check_circle</mat-icon>
|
||||
</span>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<main>
|
||||
|
||||
<mat-card class="os-card">
|
||||
<h2 translate>Legal Notice</h2>
|
||||
<h2 translate>Legal notice</h2>
|
||||
</mat-card>
|
||||
|
||||
<os-legal-notice-content></os-legal-notice-content>
|
||||
|
@ -43,8 +43,8 @@
|
||||
<mat-paginator class="on-transition-fade" [pageSizeOptions]="[25, 50, 75, 100, 125]"></mat-paginator>
|
||||
|
||||
<mat-menu #mediafilesMenu="matMenu">
|
||||
<button mat-menu-item (click)="deleteAllFiles()">
|
||||
<button mat-menu-item class='red-warning-text' (click)="deleteAllFiles()">
|
||||
<mat-icon>delete</mat-icon>
|
||||
<span translate>Delete All</span>
|
||||
<span translate>Delete all files</span>
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
@ -33,8 +33,12 @@
|
||||
|
||||
<!-- Save and Cancel buttons -->
|
||||
<mat-card-actions>
|
||||
<button mat-button (click)="onCreateButton()" translate>Create</button>
|
||||
<button mat-button (click)="categoryToCreate = null" translate>Abort</button>
|
||||
<button mat-button (click)="onCreateButton()">
|
||||
<span translate>Save</span>
|
||||
</button>
|
||||
<button mat-button (click)="categoryToCreate = null">
|
||||
<span translate>Cancel</span>
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
|
||||
@ -71,7 +75,8 @@
|
||||
|
||||
<!-- Edit form shows during the edit event -->
|
||||
<form id="updateForm" [formGroup]='updateForm' *ngIf="editId === category.id" (keydown)="keyDownFunction($event, category)">
|
||||
<span translate>Edit category details</span>:<br>
|
||||
<span translate>Edit category:</span>:<br>
|
||||
|
||||
<mat-form-field>
|
||||
<input formControlName="prefix" matInput placeholder="{{'Prefix' | translate}}" required>
|
||||
<mat-hint *ngIf="!updateForm.controls.prefix.valid">
|
||||
|
@ -1,9 +1,3 @@
|
||||
mat-panel-title {
|
||||
mat-icon {
|
||||
margin-right: 35px;
|
||||
}
|
||||
}
|
||||
|
||||
.meta-text-block {
|
||||
padding: 0px;
|
||||
margin: 20px;
|
||||
|
@ -15,7 +15,11 @@
|
||||
</form>
|
||||
</mat-dialog-content>
|
||||
<mat-dialog-actions>
|
||||
<button mat-button mat-dialog-close translate>Abort</button>
|
||||
<button mat-button mat-dialog-close>
|
||||
<span translate>Cancel</span>
|
||||
</button>
|
||||
<!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->
|
||||
<button mat-button (click)="saveChangeRecommendation()" translate>Save</button>
|
||||
<button mat-button (click)="saveChangeRecommendation()">
|
||||
<span translate>Save</span>
|
||||
</button>
|
||||
</mat-dialog-actions>
|
||||
|
@ -29,8 +29,12 @@
|
||||
</form>
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<button mat-button (click)="create()" translate>Create</button>
|
||||
<button mat-button (click)="commentSectionToCreate = null" translate>Abort</button>
|
||||
<button mat-button (click)="create()">
|
||||
<span translate>Save</span>
|
||||
</button>
|
||||
<button mat-button (click)="commentSectionToCreate = null">
|
||||
<span translate>Cancel</span>
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
<mat-accordion class="os-card">
|
||||
@ -60,7 +64,7 @@
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<form [formGroup]="updateForm" *ngIf="editId === section.id" (keydown)="keyDownFunction($event, section)">
|
||||
<span translate>Edit section details:</span>
|
||||
<span translate>Edit comment field:</span>
|
||||
<p>
|
||||
<mat-form-field>
|
||||
<input formControlName="name" matInput placeholder="{{'Name' | translate}}" required>
|
||||
@ -95,7 +99,7 @@
|
||||
<mat-action-row>
|
||||
<button *ngIf="editId !== section.id" mat-button class="on-transition-fade" (click)="onEditButton(section)"
|
||||
mat-icon-button>
|
||||
<mat-icon>add</mat-icon>
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="editId === section.id" mat-button class="on-transition-fade" (click)="editId = null"
|
||||
mat-icon-button>
|
||||
|
@ -81,7 +81,7 @@
|
||||
-->
|
||||
</div>
|
||||
<div class="status-row" *ngIf="change.isRejected()">
|
||||
<i class="grey" translate>{{ 'Rejected' | translate }}:</i>
|
||||
<i class="grey">{{ 'Rejected' | translate }}:</i>
|
||||
</div>
|
||||
|
||||
<div class="motion-text motion-text-diff line-numbers-outside"
|
||||
|
@ -144,10 +144,10 @@
|
||||
<!-- <div *ngIf="editMotion"> -->
|
||||
<div *ngIf='!editMotion'>
|
||||
<h3 translate>Identifier</h3>
|
||||
{{motion.identifier}}
|
||||
{{ motion.identifier }}
|
||||
</div>
|
||||
<mat-form-field *ngIf="editMotion">
|
||||
<input matInput placeholder='Identifier' formControlName='identifier' [value]='motionCopy.identifier'>
|
||||
<input matInput placeholder='{{ "Identifier" | translate }}' formControlName='identifier' [value]='motionCopy.identifier'>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
@ -161,9 +161,9 @@
|
||||
</div>
|
||||
<div *ngIf="!editMotion || !newMotion">
|
||||
<h3 translate>Submitters</h3>
|
||||
<ul *ngFor="let submitter of motion.submitters">
|
||||
<li>{{submitter.full_name}}</li>
|
||||
</ul>
|
||||
<mat-chip-list *ngFor="let submitter of motion.submitters">
|
||||
<mat-chip>{{ submitter.full_name }}</mat-chip>
|
||||
</mat-chip-list>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -173,7 +173,7 @@
|
||||
<div *ngIf="editMotion">
|
||||
<div *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
|
||||
<os-search-value-selector ngDefaultControl [form]="metaInfoForm" [formControl]="this.metaInfoForm.get('supporters_id')"
|
||||
[multiple]="true" listname="Supporter" [InputListValues]="this.supporterObserver"></os-search-value-selector>
|
||||
[multiple]="true" listname="{{ 'Supporters' | translate }}" [InputListValues]="this.supporterObserver"></os-search-value-selector>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="!editMotion && motion.hasSupporters()">
|
||||
@ -194,7 +194,7 @@
|
||||
</div>
|
||||
<div *ngIf="!editMotion">
|
||||
<mat-form-field *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
|
||||
<mat-select placeholder='State' formControlName='state_id' (selectionChange)="onChangeState($event)">
|
||||
<mat-select placeholder="{{ 'State' | translate }}" formControlName='state_id' (selectionChange)="onChangeState($event)">
|
||||
<mat-option [value]="motion.state_id">{{ motion.state }}</mat-option>
|
||||
<mat-divider></mat-divider>
|
||||
<mat-option *ngFor="let state of motion.nextStates" [value]="state.id">{{ state }}</mat-option>
|
||||
@ -209,11 +209,16 @@
|
||||
</div>
|
||||
|
||||
<!-- Recommendation -->
|
||||
<!-- The suggestion of the work group weather or not a motion should be accepted -->
|
||||
<div *ngIf='motion && motion.state && recommender'>
|
||||
<mat-form-field *ngIf="!editMotion && !newMotion">
|
||||
<mat-select [placeholder]=recommender formControlName='recommendation_id' (selectionChange)="onChangerRecommenderState($event)">
|
||||
<mat-option *ngFor="let recommendation of motion.possibleRecommendations" [value]="recommendation.id">{{ recommendation }}</mat-option>
|
||||
<mat-option *ngFor="let recommendation of motion.possibleRecommendations" [value]="recommendation.id">
|
||||
{{ recommendation.recommendation_label | translate }}
|
||||
</mat-option>
|
||||
<mat-divider></mat-divider>
|
||||
<mat-option [value]="null">
|
||||
<mat-icon>replay</mat-icon><span translate>Reset recommendation</span>
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
@ -222,11 +227,11 @@
|
||||
<div *ngIf="motion && motion.category_id || editMotion">
|
||||
<div *ngIf='!editMotion'>
|
||||
<h3 translate>Category</h3>
|
||||
{{motion.category}}
|
||||
{{ motion.category }}
|
||||
</div>
|
||||
<div *ngIf="editMotion || newMotion">
|
||||
<os-search-value-selector ngDefaultControl [form]="metaInfoForm" [formControl]="this.metaInfoForm.get('category_id')"
|
||||
[multiple]="false" listname="Category" [InputListValues]="this.categoryObserver"></os-search-value-selector>
|
||||
[multiple]="false" listname="{{ 'Category' | translate }}" [InputListValues]="this.categoryObserver"></os-search-value-selector>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -238,7 +243,7 @@
|
||||
</div>
|
||||
<div *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
|
||||
<mat-form-field *ngIf="editMotion">
|
||||
<input matInput placeholder='Origin' formControlName='origin' [value]='motionCopy.origin'>
|
||||
<input matInput placeholder="{{ 'Origin' | translate}}" formControlName='origin' [value]='motionCopy.origin'>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
@ -255,10 +260,10 @@
|
||||
|
||||
<!-- Line Number and Diff buttons-->
|
||||
<div class="motion-text-controls">
|
||||
<button type="button" mat-icon-button [matMenuTriggerFor]="lineNumberingMenu">
|
||||
<button type="button" mat-icon-button [matMenuTriggerFor]="lineNumberingMenu" matTooltip="{{ 'Line numbering' | translate }}">
|
||||
<mat-icon>format_list_numbered</mat-icon>
|
||||
</button>
|
||||
<button type="button" mat-icon-button [matMenuTriggerFor]="changeRecoMenu">
|
||||
<button type="button" mat-icon-button [matMenuTriggerFor]="changeRecoMenu" matTooltip="{{ 'Change recommendations' | translate }}">
|
||||
<mat-icon>rate_review</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
@ -269,7 +274,7 @@
|
||||
<h4>{{motion.title}}</h4>
|
||||
</div>
|
||||
<mat-form-field *ngIf="editMotion" class="wide-form">
|
||||
<input matInput osAutofocus placeholder='Title' formControlName='title' [value]='motionCopy.title'
|
||||
<input matInput osAutofocus placeholder="{{ 'Title' | translate }}" formControlName='title' [value]='motionCopy.title'
|
||||
required>
|
||||
</mat-form-field>
|
||||
|
||||
@ -290,18 +295,18 @@
|
||||
[scrollToChange]="scrollToChange" (createChangeRecommendation)="createChangeRecommendation($event)"></os-motion-detail-diff>
|
||||
</ng-container>
|
||||
<mat-form-field *ngIf="motion && editMotion" class="wide-form">
|
||||
<textarea matInput placeholder='Motion Text' formControlName='text' [value]='motionCopy.text' required></textarea>
|
||||
<textarea matInput placeholder="{{ 'Motion text' | translate }}" formControlName='text' [value]='motionCopy.text' required></textarea>
|
||||
</mat-form-field>
|
||||
|
||||
|
||||
<!-- Reason -->
|
||||
<div *ngIf="motion && motion.reason || editMotion">
|
||||
<h5 translate>Reason</h5>
|
||||
<h5 *ngIf="!editMotion" translate>Reason</h5>
|
||||
<div class="motion-text" *ngIf='!editMotion'>
|
||||
<div [innerHtml]='motion.reason'></div>
|
||||
</div>
|
||||
<mat-form-field *ngIf="editMotion" class="wide-form">
|
||||
<textarea matInput placeholder="Reason" formControlName='reason' [value]='motionCopy.reason'></textarea>
|
||||
<textarea matInput placeholder="{{ 'Reason' | translate }}" formControlName='reason' [value]='motionCopy.reason'></textarea>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
@ -309,10 +314,10 @@
|
||||
</ng-template>
|
||||
|
||||
<!-- Line number Menu -->
|
||||
<mat-menu #lineNumberingMenu="matMenu">
|
||||
<button mat-menu-item translate (click)=setLineNumberingMode(0)>None</button>
|
||||
<button mat-menu-item translate (click)=setLineNumberingMode(1)>Inline</button>
|
||||
<button mat-menu-item translate (click)=setLineNumberingMode(2)>Outside</button>
|
||||
<mat-menu #lineNumberingMenu="matMenu" >
|
||||
<button mat-menu-item translate (click)=setLineNumberingMode(0)>none</button>
|
||||
<button mat-menu-item translate (click)=setLineNumberingMode(1)>inline</button>
|
||||
<button mat-menu-item translate (click)=setLineNumberingMode(2)>outside</button>
|
||||
</mat-menu>
|
||||
|
||||
<!-- Diff View Menu -->
|
||||
|
@ -52,7 +52,7 @@
|
||||
<mat-header-cell *matHeaderCellDef mat-sort-header>State</mat-header-cell>
|
||||
<mat-cell *matCellDef="let motion">
|
||||
<div *ngIf='isDisplayIcon(motion.state) && motion.state' class='innerTable'>
|
||||
<mat-icon>{{getStateIcon(motion.state)}}></mat-icon>
|
||||
<mat-icon>{{getStateIcon(motion.state)}}</mat-icon>
|
||||
</div>
|
||||
</mat-cell>
|
||||
</ng-container>
|
||||
@ -82,7 +82,7 @@
|
||||
|
||||
<button mat-menu-item routerLink="statute-paragraphs">
|
||||
<mat-icon>account_balance</mat-icon>
|
||||
<span translate>Statute paragrpahs</span>
|
||||
<span translate>Statute paragraphs</span>
|
||||
</button>
|
||||
|
||||
</mat-menu>
|
||||
|
@ -40,8 +40,12 @@
|
||||
</form>
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<button mat-button (click)="create()" translate>Create</button>
|
||||
<button mat-button (click)="statuteParagraphToCreate = null" translate>Abort</button>
|
||||
<button mat-button (click)="create()">
|
||||
<span translate>Save</span>
|
||||
</button>
|
||||
<button mat-button (click)="statuteParagraphToCreate = null">
|
||||
<span translate>Cancel</span>
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
<mat-accordion class="os-card">
|
||||
@ -53,7 +57,7 @@
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<form [formGroup]="updateForm" *ngIf="editId === statuteParagraph.id">
|
||||
<span translate>Edit statute paragraph details:</span>
|
||||
<span translate>Edit statute paragraph:</span>
|
||||
<p>
|
||||
<mat-form-field>
|
||||
<input formControlName="title" matInput placeholder="{{'Title' | translate}}" required>
|
||||
@ -101,7 +105,7 @@
|
||||
</mat-accordion>
|
||||
<mat-card *ngIf="statuteParagraphs.length === 0">
|
||||
<mat-card-content>
|
||||
<div class="no-content" translate>No statute paragraphs yet...</div>
|
||||
<div class="no-content" translate>No statute paragraphs</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
|
@ -67,7 +67,7 @@ export class StatuteParagraphListComponent extends BaseViewComponent implements
|
||||
/**
|
||||
* Init function.
|
||||
*
|
||||
* Sets the title and gets/observes statute paragrpahs from DataStore
|
||||
* Sets the title and gets/observes statute paragraphs from DataStore
|
||||
*/
|
||||
public ngOnInit(): void {
|
||||
super.setTitle('Statute paragraphs');
|
||||
@ -149,14 +149,10 @@ export class StatuteParagraphListComponent extends BaseViewComponent implements
|
||||
}
|
||||
}
|
||||
|
||||
public sortStatuteParagraphs(): void {
|
||||
console.log('Not yet implemented. Depends on other Features');
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: navigate to a sorting view
|
||||
*/
|
||||
public sortStatuteParagrpahs(): void {
|
||||
console.log('sort statute paragraphs');
|
||||
public sortStatuteParagraphs(): void {
|
||||
console.log('Not yet implemented. Depends on other Features');
|
||||
}
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ export class ViewMotion extends BaseViewModel {
|
||||
}
|
||||
|
||||
public get possibleRecommendations(): WorkflowState[] {
|
||||
return this.recommendation && this.workflow ? this.workflow.states : null;
|
||||
return this.workflow ? this.workflow.states.filter(recommendation => recommendation.recommendation_label !== undefined) : null;
|
||||
}
|
||||
|
||||
public get origin(): string {
|
||||
|
@ -19,11 +19,11 @@
|
||||
</a>
|
||||
<a *ngIf="isLoggedIn" (click)='editProfile()' mat-list-item>
|
||||
<mat-icon>person</mat-icon>
|
||||
<span translate>Edit Profile</span>
|
||||
<span translate>Edit profile</span>
|
||||
</a>
|
||||
<a *ngIf="isLoggedIn" (click)='changePassword()' mat-list-item>
|
||||
<mat-icon>vpn_key</mat-icon>
|
||||
<span translate>Change Password</span>
|
||||
<span translate>Change password</span>
|
||||
</a>
|
||||
<mat-divider></mat-divider>
|
||||
<a *ngIf="isLoggedIn" (click)='logout()' mat-list-item>
|
||||
@ -40,7 +40,7 @@
|
||||
<mat-menu #languageMenu="matMenu">
|
||||
<button mat-menu-item (click)='selectLang("en")' translate>English</button>
|
||||
<button mat-menu-item (click)='selectLang("de")' translate>German</button>
|
||||
<button mat-menu-item (click)='selectLang("fr")' translate>French</button>
|
||||
<button mat-menu-item (click)='selectLang("cs")' translate>Czech</button>
|
||||
</mat-menu>
|
||||
|
||||
<!-- navigation -->
|
||||
@ -49,7 +49,7 @@
|
||||
<a [@navItemAnim] *osPerms="entry.permission" mat-list-item (click)='toggleSideNav()' [routerLink]='entry.route'
|
||||
routerLinkActive='active' [routerLinkActiveOptions]="{exact: entry.route === '/'}">
|
||||
<mat-icon>{{ entry.icon }}</mat-icon>
|
||||
<span translate>{{ entry.displayName | translate}}</span>
|
||||
<span>{{ entry.displayName | translate}}</span>
|
||||
|
||||
</a>
|
||||
</span>
|
||||
|
@ -109,7 +109,7 @@ export class SiteComponent extends BaseComponent implements OnInit {
|
||||
|
||||
/**
|
||||
* Let the user change the language
|
||||
* @param lang the desired language (en, de, fr, ...)
|
||||
* @param lang the desired language (en, de, cs, ...)
|
||||
*/
|
||||
public selectLang(selection: string): void {
|
||||
this.translate.use(selection).subscribe();
|
||||
@ -123,8 +123,8 @@ export class SiteComponent extends BaseComponent implements OnInit {
|
||||
return this.translate.instant('English');
|
||||
} else if (abbreviation === 'de') {
|
||||
return this.translate.instant('German');
|
||||
} else if (abbreviation === 'fr') {
|
||||
return this.translate.instant('French');
|
||||
} else if (abbreviation === 'cs') {
|
||||
return this.translate.instant('Czech');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
<form *ngIf="editTag" [formGroup]="tagForm" (ngSubmit)="saveTag()" (keydown)="keyDownFunction($event)">
|
||||
<mat-form-field>
|
||||
<input type="text" matInput osAutofocus required formControlName="name" placeholder="{{ 'New tag name' | translate}}">
|
||||
<mat-error *ngIf="tagForm.invalid" translate>A tag name is required</mat-error>
|
||||
<mat-error *ngIf="tagForm.invalid" translate>Required</mat-error>
|
||||
</mat-form-field>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<form *ngIf="editGroup" [formGroup]="groupForm" (ngSubmit)="saveGroup()" (keydown)="keyDownFunction($event)">
|
||||
<mat-form-field>
|
||||
<input type="text" matInput osAutofocus required formControlName="name" placeholder="{{ 'New group name' | translate}}">
|
||||
<mat-error *ngIf="groupForm.invalid" translate>A group name is required</mat-error>
|
||||
<mat-error *ngIf="groupForm.invalid" translate>Required</mat-error>
|
||||
</mat-form-field>
|
||||
</form>
|
||||
</div>
|
||||
@ -29,25 +29,25 @@
|
||||
<mat-accordion *ngFor="let app of repo.appPermissions">
|
||||
<mat-expansion-panel class="mat-elevation-z0" [expanded]=true>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title translate>
|
||||
{{ app.name }}
|
||||
<mat-panel-title>
|
||||
{{ app.name | translate }}
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
|
||||
<div class="scrollable-perm-matrix">
|
||||
<table mat-table class='on-transition-fade' [dataSource]="getTableDataSource(app.permissions)">
|
||||
<ng-container matColumnDef="perm" sticky>
|
||||
<mat-header-cell *matHeaderCellDef translate> Permissions </mat-header-cell>
|
||||
<mat-cell *matCellDef="let perm" translate>
|
||||
{{ perm.display_name }}
|
||||
<mat-header-cell *matHeaderCellDef translate>Permissions</mat-header-cell>
|
||||
<mat-cell *matCellDef="let perm">
|
||||
{{ perm.display_name | translate }}
|
||||
</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<div *ngFor=" let group of groups; trackBy: trackGroupArray">
|
||||
<ng-container [matColumnDef]="group.name">
|
||||
<mat-header-cell class="group-head-table-cell" *matHeaderCellDef (click)="selectGroup(group)">
|
||||
<div class="inner-table" translate>
|
||||
{{ group.name }}
|
||||
<div class="inner-table">
|
||||
{{ group.name | translate }}
|
||||
</div>
|
||||
</mat-header-cell>
|
||||
<mat-cell *matCellDef="let perm">
|
||||
|
@ -41,13 +41,13 @@
|
||||
|
||||
<!-- First name -->
|
||||
<mat-form-field class='form30 distance force-min-with' *ngIf='user.first_name || editUser && isAllowed("manage")'>
|
||||
<input type='text' matInput placeholder='{{"First Name" | translate}}' formControlName='first_name'
|
||||
<input type='text' matInput placeholder='{{"Given name" | translate}}' formControlName='first_name'
|
||||
[value]='user.first_name'>
|
||||
</mat-form-field>
|
||||
|
||||
<!-- Last name -->
|
||||
<mat-form-field class='form30 force-min-with' *ngIf='user.last_name || editUser && isAllowed("manage")'>
|
||||
<input type='text' matInput placeholder='{{"Last Name" | translate}}' formControlName='last_name'
|
||||
<input type='text' matInput placeholder='{{"Surname" | translate}}' formControlName='last_name'
|
||||
[value]='user.last_name'>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
@ -55,7 +55,7 @@
|
||||
<div *ngIf='isAllowed("seePersonal")'>
|
||||
<!-- E-Mail -->
|
||||
<mat-form-field class='form100' *ngIf="user.email || editUser">
|
||||
<input type='email' matInput placeholder='{{"EMail" | translate}}' name="email" formControlName='email'
|
||||
<input type='email' matInput placeholder='{{"Email" | translate}}' name="email" formControlName='email'
|
||||
[value]='user.email'>
|
||||
<mat-error *ngIf="personalInfoForm.get('email').hasError('email')">
|
||||
Please enter a valid email address
|
||||
@ -66,13 +66,13 @@
|
||||
<div>
|
||||
<!-- Strucuture Level -->
|
||||
<mat-form-field class='form70 distance' *ngIf='user.structure_level || editUser && isAllowed("manage")'>
|
||||
<input type='text' matInput placeholder='{{"Structure Level" | translate}}' formControlName='structure_level'
|
||||
<input type='text' matInput placeholder='{{"Structure level" | translate}}' formControlName='structure_level'
|
||||
[value]='user.structure_level'>
|
||||
</mat-form-field>
|
||||
|
||||
<!-- Partizipant Number -->
|
||||
<mat-form-field class='form20 force-min-with' *ngIf='user.participant_number || editUser && isAllowed("manage")'>
|
||||
<input type='text' matInput placeholder='{{"Participant Number" | translate}}' formControlName='number'
|
||||
<input type='text' matInput placeholder='{{"Participant number" | translate}}' formControlName='number'
|
||||
[value]='user.participant_number'>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
@ -89,7 +89,7 @@
|
||||
<div *ngIf='isAllowed("manage")'>
|
||||
<!-- Initial Password -->
|
||||
<mat-form-field class='form100'>
|
||||
<input matInput placeholder='{{"Initial Password" | translate}}' formControlName='default_password'
|
||||
<input matInput placeholder='{{"Initial password" | translate}}' formControlName='default_password'
|
||||
[value]='user.default_password'>
|
||||
<mat-hint align="end">Generate</mat-hint>
|
||||
<button type="button" mat-button matSuffix mat-icon-button [disabled]='!newUser' (click)='generatePassword()'>
|
||||
@ -102,7 +102,7 @@
|
||||
<!-- About me -->
|
||||
<!-- TODO: Needs Rich Text Editor -->
|
||||
<mat-form-field class='form100' *ngIf="user.about_me || editUser">
|
||||
<textarea formControlName='about_me' matInput placeholder='{{"About Me" | translate}}' [value]='user.about_me'></textarea>
|
||||
<textarea formControlName='about_me' matInput placeholder='{{"About me" | translate}}' [value]='user.about_me'></textarea>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
@ -125,12 +125,12 @@
|
||||
<!-- Present? -->
|
||||
<mat-checkbox formControlName='is_present' matTooltip='{{"Designates whether this user is in the room." | translate}} '
|
||||
[value]='user.is_present'>
|
||||
<span translate>Is Present</span>
|
||||
<span translate>Is present</span>
|
||||
</mat-checkbox>
|
||||
<!-- Active? -->
|
||||
<mat-checkbox *osPerms="'users.can_see_extra_data'" formControlName='is_active' matTooltip='{{"Designates whether this user should be treated as active. Unselect this instead of deleting the account." | translate}}'
|
||||
[value]='user.is_active'>
|
||||
<span translate>Is Active</span>
|
||||
<span translate>Is active</span>
|
||||
</mat-checkbox>
|
||||
<!-- Commitee? -->
|
||||
<mat-checkbox formControlName='is_committee' matTooltip='{{"Designates whether this user should be treated as a committee." | translate}}'
|
||||
|
@ -1,7 +1,7 @@
|
||||
<os-head-bar mainButton=true (mainEvent)=onPlusButton()>
|
||||
<!-- Title -->
|
||||
<div class="title-slot">
|
||||
<h2 translate>Users</h2>
|
||||
<h2 translate>Participants</h2>
|
||||
</div>
|
||||
|
||||
<!-- Menu -->
|
||||
|
1
client/src/assets/i18n/cs.json
Normal file
1
client/src/assets/i18n/cs.json
Normal file
@ -0,0 +1 @@
|
||||
{"About me":"O mě","Accept":"Přijmout","Accepted":"Přijato","Agenda":"Pořad jednání","All your changes are saved immediately.":"Všechny vaše změny jsou okamžitě uloženy.","Cancel":"Zrušit","Categories":"Skupiny","Category":"Obor činnosti","Change password":"Změnit heslo","Change recommendation":"Změnit doporučení","Changed version":"Změněná verze","Comment":"Poznámka","Comments":"Poznámky","Content":"Obsah","Create new category":"Vytvořit nový obor činnosti","Create new comment field":"Vytvořit nové poznámkové pole","Create new statute paragraph":"Vytvořit nový odstavec předpisu","Delete":"Smazat","Delete all files":"Smazat všechny soubory","Designates whether this user is in the room.":"Určuje, zda je tento uživatel v místnosti.","Designates whether this user should be treated as a committee.":"Určuje, zda se s tímto uživatelem má zacházet jako s výborem.","Designates whether this user should be treated as active. Unselect this instead of deleting the account.":"Určuje, zda se má s tímto uživatelem zacházet jako s činným. Zrušte vybrání namísto smazání účtu.","Diff version":"Znázornění změn","Edit":"Upravit","Edit category:":"Upravit obor činnosti:","Edit comment field:":"Upravit poznámkové pole:","Edit profile":"Upravit profil","Edit statute paragraph:":"Upravit odstavec předpisu:","Elections":"Elections","Email":"E-mail","English":"Angličtina","Export ...":"Vyvést...","Export as csv":"Vyvést jako CSV","FILTER":"FILTR","Files":"Soubory","Final version":"Konečná verze","French":"Francouzština","German":"Němčina","Given name":"Křestní jméno","Groups":"Skupiny","Groups with read permissions":"Skupiny s oprávněním pro čtení","Groups with write permissions":"Skupiny s oprávněním pro zápis","Home":"Domovská stránka","Identifier":"Identifikátor","Import ...":"Zavést...","Initial password":"Počáteční heslo","Installed plugins":"Nainstalované přídavné moduly","Is a committee":"Je výbor","Is active":"Je činná","Is present":"Je přítomná","Legal notice":"Právní upozornění","License":"Povolení","Line":"Řádek","Login":"Přihlášení","Login as Guest":"Přihlásit se jako host","Logout":"Odhlásit se","Meta information":"Popisné informace","Motion":"Návrh","Motions":"Návrhy","Name":"Název","New group name":"Název nové skupiny","New motion":"Nový návrh","New tag name":"Název nové značky","No change recommendations yet":"Dosud žádná doporučení změn","No comment":"Bez poznámky","No groups selected":"Nevybrány žádné skupiny","No personal note":"Bez osobní poznámky","No statute paragraphs":"Žádné odstavce předpisu","None":"Žádné","Note: You have to reject all change recommendations if the plenum does not follow the recommendation. This does not affect amendments.":"Poznámka: Musíte odmítnout všechna doporučení změn, pokud plenární zasedání nesleduje doporučení. Toto neovlivní dodatky.","OK":"OK","Offline mode: You can use OpenSlides but changes are not saved.":"Režim nepřipojen k internetu: Můžete OpenSlides používat, ale změny nejsou ukládány.","Only for internal notes.":"Jen pro vnitřní poznámky.","Origin":"Původ","Original version":"Původní verze","PDF":"PDF","Participant number":"Číslo účastníka","Participants":"Účastníci","Permissions":"Oprávnění","Personal note":"Osobní poznámka","Prefix":"Předpona","Present":"Přítomen","Privacy Policy":"Politika pro soukromí","Privacy policy":"Politika pro soukromí","Project":"Promítat","Projector":"Promítací přístroj","Public":"Veřejný","Reason":"Zdůvodnění","Reject":"Odmítnout","Rejected":"Odmítnuto","Required":"Požadováno","Reset recommendation":"Vynulovat doporučení","Reset state":"Obnovit stav","SORT":"TŘÍDIT","Save":"Uložit","Selected values":"Vybrané hodnoty","Settings":"Nastavení","Sort ...":"Třídit...","State":"Stav","Statute paragraph":"Odstavec předpisu","Statute paragraphs":"Odstavce předpisu","Structure level":"Úroveň rozčlenění","Submitters":"Navrhovatelé","Summary of changes":"Přehled změn","Supporters":"Podporovatel","Surname":"Příjmení","Tags":"Klíčová slova","The assembly may decide:":"Shromáždění se může usnést:","The event manager hasn't set up a privacy policy yet.":"Správce událostí ještě nenastavil politiku soukromí.","This change collides with another one.":"Tato změna se střetává s jinou.","Title":"Název","Username":"Uživatelské jméno","Welcome to OpenSlides":"Vítejte v OpenSlides","Yes":"Ano","by":"od","inline":"uvnitř","none":"žádné","outside":"vně"}
|
376
client/src/assets/i18n/cs.po
Normal file
376
client/src/assets/i18n/cs.po
Normal file
@ -0,0 +1,376 @@
|
||||
# Translators:
|
||||
# fri, 2018
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Last-Translator: fri, 2018\n"
|
||||
"Language-Team: Czech (https://www.transifex.com/openslides/teams/14270/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
msgid "About me"
|
||||
msgstr "O mě"
|
||||
|
||||
msgid "Accept"
|
||||
msgstr "Přijmout"
|
||||
|
||||
msgid "Accepted"
|
||||
msgstr "Přijato"
|
||||
|
||||
msgid "Agenda"
|
||||
msgstr "Pořad jednání"
|
||||
|
||||
msgid "All your changes are saved immediately."
|
||||
msgstr "Všechny vaše změny jsou okamžitě uloženy."
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
msgid "Categories"
|
||||
msgstr "Skupiny"
|
||||
|
||||
msgid "Category"
|
||||
msgstr "Obor činnosti"
|
||||
|
||||
msgid "Change password"
|
||||
msgstr "Změnit heslo"
|
||||
|
||||
msgid "Change recommendation"
|
||||
msgstr "Změnit doporučení"
|
||||
|
||||
msgid "Changed version"
|
||||
msgstr "Změněná verze"
|
||||
|
||||
msgid "Comment"
|
||||
msgstr "Poznámka"
|
||||
|
||||
msgid "Comments"
|
||||
msgstr "Poznámky"
|
||||
|
||||
msgid "Content"
|
||||
msgstr "Obsah"
|
||||
|
||||
msgid "Create new category"
|
||||
msgstr "Vytvořit nový obor činnosti"
|
||||
|
||||
msgid "Create new comment field"
|
||||
msgstr "Vytvořit nové poznámkové pole"
|
||||
|
||||
msgid "Create new statute paragraph"
|
||||
msgstr "Vytvořit nový odstavec předpisu"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Smazat"
|
||||
|
||||
msgid "Delete all files"
|
||||
msgstr "Smazat všechny soubory"
|
||||
|
||||
msgid "Designates whether this user is in the room."
|
||||
msgstr "Určuje, zda je tento uživatel v místnosti."
|
||||
|
||||
msgid "Designates whether this user should be treated as a committee."
|
||||
msgstr "Určuje, zda se s tímto uživatelem má zacházet jako s výborem."
|
||||
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting the account."
|
||||
msgstr ""
|
||||
"Určuje, zda se má s tímto uživatelem zacházet jako s činným. Zrušte vybrání "
|
||||
"namísto smazání účtu."
|
||||
|
||||
msgid "Diff version"
|
||||
msgstr "Znázornění změn"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Upravit"
|
||||
|
||||
msgid "Edit category:"
|
||||
msgstr "Upravit obor činnosti:"
|
||||
|
||||
msgid "Edit comment field:"
|
||||
msgstr "Upravit poznámkové pole:"
|
||||
|
||||
msgid "Edit profile"
|
||||
msgstr "Upravit profil"
|
||||
|
||||
msgid "Edit statute paragraph:"
|
||||
msgstr "Upravit odstavec předpisu:"
|
||||
|
||||
msgid "Elections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
msgid "English"
|
||||
msgstr "Angličtina"
|
||||
|
||||
msgid "Export ..."
|
||||
msgstr "Vyvést..."
|
||||
|
||||
msgid "Export as csv"
|
||||
msgstr "Vyvést jako CSV"
|
||||
|
||||
msgid "FILTER"
|
||||
msgstr "FILTR"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Soubory"
|
||||
|
||||
msgid "Final version"
|
||||
msgstr "Konečná verze"
|
||||
|
||||
msgid "French"
|
||||
msgstr "Francouzština"
|
||||
|
||||
msgid "German"
|
||||
msgstr "Němčina"
|
||||
|
||||
msgid "Given name"
|
||||
msgstr "Křestní jméno"
|
||||
|
||||
msgid "Groups"
|
||||
msgstr "Skupiny"
|
||||
|
||||
msgid "Groups with read permissions"
|
||||
msgstr "Skupiny s oprávněním pro čtení"
|
||||
|
||||
msgid "Groups with write permissions"
|
||||
msgstr "Skupiny s oprávněním pro zápis"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "Domovská stránka"
|
||||
|
||||
msgid "Identifier"
|
||||
msgstr "Identifikátor"
|
||||
|
||||
msgid "Import ..."
|
||||
msgstr "Zavést..."
|
||||
|
||||
msgid "Initial password"
|
||||
msgstr "Počáteční heslo"
|
||||
|
||||
msgid "Installed plugins"
|
||||
msgstr "Nainstalované přídavné moduly"
|
||||
|
||||
msgid "Is a committee"
|
||||
msgstr "Je výbor"
|
||||
|
||||
msgid "Is active"
|
||||
msgstr "Je činná"
|
||||
|
||||
msgid "Is present"
|
||||
msgstr "Je přítomná"
|
||||
|
||||
msgid "Legal notice"
|
||||
msgstr "Právní upozornění"
|
||||
|
||||
msgid "License"
|
||||
msgstr "Povolení"
|
||||
|
||||
msgid "Line"
|
||||
msgstr "Řádek"
|
||||
|
||||
msgid "Login"
|
||||
msgstr "Přihlášení"
|
||||
|
||||
msgid "Login as Guest"
|
||||
msgstr "Přihlásit se jako host"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Odhlásit se"
|
||||
|
||||
msgid "Meta information"
|
||||
msgstr "Popisné informace"
|
||||
|
||||
msgid "Motion"
|
||||
msgstr "Návrh"
|
||||
|
||||
msgid "Motions"
|
||||
msgstr "Návrhy"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Název"
|
||||
|
||||
msgid "New group name"
|
||||
msgstr "Název nové skupiny"
|
||||
|
||||
msgid "New motion"
|
||||
msgstr "Nový návrh"
|
||||
|
||||
msgid "New tag name"
|
||||
msgstr "Název nové značky"
|
||||
|
||||
msgid "No change recommendations yet"
|
||||
msgstr "Dosud žádná doporučení změn"
|
||||
|
||||
msgid "No comment"
|
||||
msgstr "Bez poznámky"
|
||||
|
||||
msgid "No groups selected"
|
||||
msgstr "Nevybrány žádné skupiny"
|
||||
|
||||
msgid "No personal note"
|
||||
msgstr "Bez osobní poznámky"
|
||||
|
||||
msgid "No statute paragraphs"
|
||||
msgstr "Žádné odstavce předpisu"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Žádné"
|
||||
|
||||
msgid ""
|
||||
"Note: You have to reject all change recommendations if the plenum does not "
|
||||
"follow the recommendation. This does not affect amendments."
|
||||
msgstr ""
|
||||
"Poznámka: Musíte odmítnout všechna doporučení změn, pokud plenární zasedání "
|
||||
"nesleduje doporučení. Toto neovlivní dodatky."
|
||||
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
msgid "Offline mode: You can use OpenSlides but changes are not saved."
|
||||
msgstr ""
|
||||
"Režim nepřipojen k internetu: Můžete OpenSlides používat, ale změny nejsou "
|
||||
"ukládány."
|
||||
|
||||
msgid "Only for internal notes."
|
||||
msgstr "Jen pro vnitřní poznámky."
|
||||
|
||||
msgid "Origin"
|
||||
msgstr "Původ"
|
||||
|
||||
msgid "Original version"
|
||||
msgstr "Původní verze"
|
||||
|
||||
msgid "PDF"
|
||||
msgstr "PDF"
|
||||
|
||||
msgid "Participant number"
|
||||
msgstr "Číslo účastníka"
|
||||
|
||||
msgid "Participants"
|
||||
msgstr "Účastníci"
|
||||
|
||||
msgid "Permissions"
|
||||
msgstr "Oprávnění"
|
||||
|
||||
msgid "Personal note"
|
||||
msgstr "Osobní poznámka"
|
||||
|
||||
msgid "Prefix"
|
||||
msgstr "Předpona"
|
||||
|
||||
msgid "Present"
|
||||
msgstr "Přítomen"
|
||||
|
||||
msgid "Privacy Policy"
|
||||
msgstr "Politika pro soukromí"
|
||||
|
||||
msgid "Privacy policy"
|
||||
msgstr "Politika pro soukromí"
|
||||
|
||||
msgid "Project"
|
||||
msgstr "Promítat"
|
||||
|
||||
msgid "Projector"
|
||||
msgstr "Promítací přístroj"
|
||||
|
||||
msgid "Public"
|
||||
msgstr "Veřejný"
|
||||
|
||||
msgid "Reason"
|
||||
msgstr "Zdůvodnění"
|
||||
|
||||
msgid "Reject"
|
||||
msgstr "Odmítnout"
|
||||
|
||||
msgid "Rejected"
|
||||
msgstr "Odmítnuto"
|
||||
|
||||
msgid "Required"
|
||||
msgstr "Požadováno"
|
||||
|
||||
msgid "Reset recommendation"
|
||||
msgstr "Vynulovat doporučení"
|
||||
|
||||
msgid "Reset state"
|
||||
msgstr "Obnovit stav"
|
||||
|
||||
msgid "SORT"
|
||||
msgstr "TŘÍDIT"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Uložit"
|
||||
|
||||
msgid "Selected values"
|
||||
msgstr "Vybrané hodnoty"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Nastavení"
|
||||
|
||||
msgid "Sort ..."
|
||||
msgstr "Třídit..."
|
||||
|
||||
msgid "State"
|
||||
msgstr "Stav"
|
||||
|
||||
msgid "Statute paragraph"
|
||||
msgstr "Odstavec předpisu"
|
||||
|
||||
msgid "Statute paragraphs"
|
||||
msgstr "Odstavce předpisu"
|
||||
|
||||
msgid "Structure level"
|
||||
msgstr "Úroveň rozčlenění"
|
||||
|
||||
msgid "Submitters"
|
||||
msgstr "Navrhovatelé"
|
||||
|
||||
msgid "Summary of changes"
|
||||
msgstr "Přehled změn"
|
||||
|
||||
msgid "Supporters"
|
||||
msgstr "Podporovatel"
|
||||
|
||||
msgid "Surname"
|
||||
msgstr "Příjmení"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Klíčová slova"
|
||||
|
||||
msgid "The assembly may decide:"
|
||||
msgstr "Shromáždění se může usnést:"
|
||||
|
||||
msgid "The event manager hasn't set up a privacy policy yet."
|
||||
msgstr "Správce událostí ještě nenastavil politiku soukromí."
|
||||
|
||||
msgid "This change collides with another one."
|
||||
msgstr "Tato změna se střetává s jinou."
|
||||
|
||||
msgid "Title"
|
||||
msgstr "Název"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Uživatelské jméno"
|
||||
|
||||
msgid "Welcome to OpenSlides"
|
||||
msgstr "Vítejte v OpenSlides"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ano"
|
||||
|
||||
msgid "by"
|
||||
msgstr "od"
|
||||
|
||||
msgid "inline"
|
||||
msgstr "uvnitř"
|
||||
|
||||
msgid "none"
|
||||
msgstr "žádné"
|
||||
|
||||
msgid "outside"
|
||||
msgstr "vně"
|
File diff suppressed because one or more lines are too long
1113
client/src/assets/i18n/de.po
Normal file
1113
client/src/assets/i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,95 +0,0 @@
|
||||
{
|
||||
"Cancel": "",
|
||||
"About Me": "",
|
||||
"Category": "",
|
||||
"Change Password": "",
|
||||
"Changed version": "",
|
||||
"Comment": "",
|
||||
"Content": "",
|
||||
"Copyright by": "",
|
||||
"Delete User": "",
|
||||
"DeleteMotion": "",
|
||||
"Designates whether this user is in the room": {
|
||||
"0": ""
|
||||
},
|
||||
"Designates whether this user should be treated as a committee": {
|
||||
"0": ""
|
||||
},
|
||||
"Designates whether this user should be treated as active": {
|
||||
" Unselect this instead of deleting the account": {
|
||||
"0": ""
|
||||
}
|
||||
},
|
||||
"Diff version": "",
|
||||
"EMail": "",
|
||||
"Edit Profile": "",
|
||||
"Edit category details:": "",
|
||||
"English": "",
|
||||
"Export As": {
|
||||
"0": {
|
||||
"0": {
|
||||
"0": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"FILTER": "",
|
||||
"Final version": "",
|
||||
"First Name": "",
|
||||
"French": "",
|
||||
"German": "",
|
||||
"Groups": "",
|
||||
"Identifier": "",
|
||||
"Initial Password": "",
|
||||
"Inline": "",
|
||||
"Installed plugins": "",
|
||||
"Is Active": "",
|
||||
"Is Present": "",
|
||||
"Is a committee": "",
|
||||
"Last Name": "",
|
||||
"Legal Notice": "",
|
||||
"License": "",
|
||||
"Login": "",
|
||||
"Login as Guest": "",
|
||||
"Logout": "",
|
||||
"Meta information": "",
|
||||
"Motion": "",
|
||||
"Motions": "",
|
||||
"Name": "",
|
||||
"None": "",
|
||||
"OK": "",
|
||||
"Offline mode: You can use OpenSlides but changes are not saved": {
|
||||
"0": ""
|
||||
},
|
||||
"Only for internal notes": {
|
||||
"0": ""
|
||||
},
|
||||
"Origin": "",
|
||||
"Original version": "",
|
||||
"Outside": "",
|
||||
"Participant Number": "",
|
||||
"Personal Note": "",
|
||||
"Personal note": "",
|
||||
"Prefix": "",
|
||||
"Present": "",
|
||||
"Privacy Policy": "",
|
||||
"Project": "",
|
||||
"Projector": "",
|
||||
"Reason": "",
|
||||
"Required": "",
|
||||
"Reset State": "",
|
||||
"Reset recommendation": "",
|
||||
"SORT": "",
|
||||
"Selected Values": "",
|
||||
"State": "",
|
||||
"Structure Level": "",
|
||||
"Submitters": "",
|
||||
"Supporters": "",
|
||||
"The assembly may decide:": "",
|
||||
"The event manager hasn't set up a privacy policy yet": {
|
||||
"0": ""
|
||||
},
|
||||
"Title": "",
|
||||
"Username": "",
|
||||
"Welcome to OpenSlides": "",
|
||||
"by": ""
|
||||
}
|
1062
client/src/assets/i18n/template-en.pot
Normal file
1062
client/src/assets/i18n/template-en.pot
Normal file
File diff suppressed because it is too large
Load Diff
@ -61,8 +61,8 @@ def get_config_variables():
|
||||
input_type='choice',
|
||||
label='Default line numbering',
|
||||
choices=(
|
||||
{'value': 'outside', 'display_name': 'Outside'},
|
||||
{'value': 'inline', 'display_name': 'Inline'},
|
||||
{'value': 'outside', 'display_name': 'outside'},
|
||||
{'value': 'inline', 'display_name': 'inline'},
|
||||
{'value': 'none', 'display_name': 'Disabled'}),
|
||||
weight=322,
|
||||
group='Motions',
|
||||
|
Loading…
Reference in New Issue
Block a user