Updated tranlstions
This commit is contained in:
parent
d251bd15e6
commit
5139fe8365
@ -104,7 +104,7 @@ export class WebsocketService {
|
||||
public constructor(
|
||||
private matSnackBar: MatSnackBar,
|
||||
private zone: NgZone,
|
||||
public translate: TranslateService,
|
||||
private translate: TranslateService,
|
||||
private router: Router
|
||||
) {}
|
||||
|
||||
|
@ -1,9 +1,4 @@
|
||||
import { _ } from '@biesbjerg/ngx-translate-extract';
|
||||
|
||||
// see issue: 4078
|
||||
// function _(key: string | string[]): string | string[] {
|
||||
// return key;
|
||||
// }
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
/**
|
||||
* Add strings here that require translations but have never been declared
|
||||
@ -161,13 +156,8 @@ _('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');
|
||||
_('Statute amendment for');
|
||||
_('Creation date');
|
||||
_('Last modified');
|
||||
_('Which version?');
|
||||
|
||||
// motion workflow 1
|
||||
_('Simple Workflow');
|
||||
@ -214,7 +204,6 @@ _('Called');
|
||||
_('Called with');
|
||||
_('Recommendation');
|
||||
_('Motion block');
|
||||
_('Are you sure you want to delete this motion?');
|
||||
_('The text field may not be blank.');
|
||||
_('The reason field may not be blank.');
|
||||
|
||||
@ -356,6 +345,7 @@ _(
|
||||
|
||||
// users misc
|
||||
_('Username or password is not correct.');
|
||||
_('Guest');
|
||||
|
||||
// default groups
|
||||
_('Default');
|
||||
|
12
client/src/app/core/translate/translation-marker.ts
Normal file
12
client/src/app/core/translate/translation-marker.ts
Normal file
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Mark strings as translateable for ng-translate-extract.
|
||||
* Marked strings are added into template-en.pot by 'npm run extract'.
|
||||
*
|
||||
* @example
|
||||
* ```ts
|
||||
* _('translateable string');
|
||||
* ```
|
||||
*/
|
||||
export function _(str: string): string {
|
||||
return str;
|
||||
}
|
@ -53,7 +53,7 @@ export abstract class BaseSortListService<V extends BaseViewModel> {
|
||||
/**
|
||||
* Constructor. Does nothing. TranslateService is used for localeCompeare.
|
||||
*/
|
||||
public constructor(public translate: TranslateService, private store: StorageService) {}
|
||||
public constructor(protected translate: TranslateService, private store: StorageService) {}
|
||||
|
||||
/**
|
||||
* Put an array of data that you want sorted.
|
||||
|
@ -1,5 +1,7 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
/**
|
||||
* The possible keys of a poll object that represent numbers.
|
||||
* TODO Should be 'key of MotionPoll if type of key is number'
|
||||
@ -88,11 +90,11 @@ export class PollService {
|
||||
case 'abstain':
|
||||
return 'Abstain';
|
||||
case 'votescast':
|
||||
return 'Total votes cast';
|
||||
return _('Total votes cast');
|
||||
case 'votesvalid':
|
||||
return 'Valid votes';
|
||||
return _('Valid votes');
|
||||
case 'votesinvalid':
|
||||
return 'Invalid votes';
|
||||
return _('Invalid votes');
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { Selectable } from './selectable';
|
||||
|
||||
/**
|
||||
@ -13,14 +11,13 @@ export class EmptySelectable implements Selectable {
|
||||
|
||||
/**
|
||||
* Empty Constructor
|
||||
* @param translate translate Service
|
||||
*/
|
||||
public constructor(private translate?: TranslateService) {}
|
||||
public constructor() {}
|
||||
|
||||
/**
|
||||
* gets the title
|
||||
*/
|
||||
public getTitle = () => (this.translate ? this.translate.instant('None') : 'None');
|
||||
public getTitle = () => '–';
|
||||
|
||||
/**
|
||||
* gets the list title
|
||||
|
@ -93,7 +93,7 @@ export class OsSortFilterBarComponent<V extends BaseViewModel> {
|
||||
* @param bottomSheet
|
||||
*/
|
||||
public constructor(
|
||||
public translate: TranslateService,
|
||||
protected translate: TranslateService,
|
||||
public vp: ViewportService,
|
||||
private bottomSheet: MatBottomSheet
|
||||
) {
|
||||
|
@ -3,7 +3,7 @@
|
||||
<ngx-mat-select-search [formControl]="filterControl"></ngx-mat-select-search>
|
||||
<div *ngIf="!multiple && includeNone">
|
||||
<mat-option [value]="null">
|
||||
<span translate>None</span>
|
||||
<span>–</span>
|
||||
</mat-option>
|
||||
<mat-divider></mat-divider>
|
||||
</div>
|
||||
|
@ -133,7 +133,7 @@ export class SearchValueSelectorComponent implements OnInit, OnDestroy {
|
||||
/**
|
||||
* Empty constructor
|
||||
*/
|
||||
public constructor(public translate: TranslateService) {}
|
||||
public constructor(protected translate: TranslateService) {}
|
||||
|
||||
/**
|
||||
* onInit with filter ans subscription on filter
|
||||
|
@ -111,7 +111,7 @@ export class SortingListComponent implements OnInit, OnDestroy {
|
||||
* Creates an empty array.
|
||||
* @param translate the translation service
|
||||
*/
|
||||
public constructor(public translate: TranslateService) {
|
||||
public constructor(protected translate: TranslateService) {
|
||||
this.array = [];
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
import { BaseModel } from '../base/base-model';
|
||||
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
/**
|
||||
* Iterable pre selection of genders (sexes)
|
||||
*/
|
||||
export const genders = ['Female', 'Male', 'Diverse'];
|
||||
export const genders = [_('female'), _('male'), _('diverse')];
|
||||
|
||||
/**
|
||||
* Representation of a user in contrast to the operator.
|
||||
|
@ -19,6 +19,7 @@ import { PdfDocumentService } from 'app/core/ui-services/pdf-document.service';
|
||||
import { ViewportService } from 'app/core/ui-services/viewport.service';
|
||||
import { ViewItem } from '../../models/view-item';
|
||||
import { ProjectorElementBuildDeskriptor } from 'app/site/base/projectable';
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
/**
|
||||
* List view for the agenda.
|
||||
@ -58,7 +59,7 @@ export class AgendaListComponent extends ListViewBaseComponent<ViewItem, Item> i
|
||||
slideOptions: [
|
||||
{
|
||||
key: 'only_main_items',
|
||||
displayName: this.translate.instant('Only main agenda items'),
|
||||
displayName: _('Only main agenda items'),
|
||||
default: false
|
||||
}
|
||||
],
|
||||
@ -87,7 +88,7 @@ export class AgendaListComponent extends ListViewBaseComponent<ViewItem, Item> i
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private operator: OperatorService,
|
||||
private route: ActivatedRoute,
|
||||
@ -174,8 +175,8 @@ export class AgendaListComponent extends ListViewBaseComponent<ViewItem, Item> i
|
||||
* Click handler for the numbering button to enable auto numbering
|
||||
*/
|
||||
public async onAutoNumbering(): Promise<void> {
|
||||
const content = this.translate.instant('Are you sure you want to number all agenda items?');
|
||||
if (await this.promptService.open('', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to number all agenda items?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
await this.repo.autoNumbering().then(null, this.raiseError);
|
||||
}
|
||||
}
|
||||
@ -211,8 +212,9 @@ export class AgendaListComponent extends ListViewBaseComponent<ViewItem, Item> i
|
||||
* @param item The item to delete
|
||||
*/
|
||||
public async onDelete(item: ViewItem): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${item.getTitle()}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this entry?');
|
||||
const content = item.contentObject.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
await this.repo.delete(item).then(null, this.raiseError);
|
||||
}
|
||||
}
|
||||
@ -222,8 +224,8 @@ export class AgendaListComponent extends ListViewBaseComponent<ViewItem, Item> i
|
||||
* is only filled with any data in multiSelect mode
|
||||
*/
|
||||
public async deleteSelected(): Promise<void> {
|
||||
const content = this.translate.instant('This will delete all selected agenda items.');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete all selected items?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
for (const agenda of this.selectedRows) {
|
||||
await this.repo.delete(agenda);
|
||||
}
|
||||
|
@ -158,6 +158,6 @@
|
||||
|
||||
<button mat-menu-item (click)="clearSpeakerList()" *ngIf="!emptyList" class="red-warning-text">
|
||||
<mat-icon>delete</mat-icon>
|
||||
<span trabslate>Remove all speakers</span>
|
||||
<span translate>Remove all speakers</span>
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
@ -121,7 +121,7 @@ export class ListOfSpeakersComponent extends BaseViewComponent implements OnInit
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
snackBar: MatSnackBar,
|
||||
projectorRepo: ProjectorRepositoryService,
|
||||
private route: ActivatedRoute,
|
||||
@ -360,8 +360,10 @@ export class ListOfSpeakersComponent extends BaseViewComponent implements OnInit
|
||||
* after a confirmation dialog
|
||||
*/
|
||||
public async clearSpeakerList(): Promise<void> {
|
||||
const content = this.translate.instant('This will clear all speakers from the list.');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant(
|
||||
'Are you sure you want to delete all speakers from this list of speakers?'
|
||||
);
|
||||
if (await this.promptService.open(title, null)) {
|
||||
this.repo.deleteAllSpeakers(this.viewItem);
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +98,7 @@
|
||||
[formControl]="topicForm.get('agenda_parent_id')"
|
||||
[multiple]="false"
|
||||
[includeNone]="true"
|
||||
listname="{{ 'Parent item' | translate }}"
|
||||
listname="{{ 'Parent agenda item' | translate }}"
|
||||
[InputListValues]="itemObserver"
|
||||
></os-search-value-selector>
|
||||
</div>
|
||||
|
@ -218,8 +218,9 @@ export class TopicDetailComponent extends BaseViewComponent {
|
||||
* Handler for the delete button. Uses the PromptService
|
||||
*/
|
||||
public async onDeleteButton(): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${this.topic.title}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this entry?');
|
||||
const content = this.topic.title;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
await this.repo.delete(this.topic).then(null, this.raiseError);
|
||||
this.router.navigate(['/agenda']);
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import { Item, itemVisibilityChoices } from 'app/shared/models/agenda/item';
|
||||
import { ViewItem } from '../models/view-item';
|
||||
import { StorageService } from 'app/core/core-services/storage.service';
|
||||
import { ItemRepositoryService } from 'app/core/repositories/agenda/item-repository.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -18,8 +19,9 @@ export class AgendaFilterListService extends BaseFilterListService<Item, ViewIte
|
||||
* Constructor. Also creates the dynamic filter options
|
||||
* @param store
|
||||
* @param repo
|
||||
* @param translate Translation service
|
||||
*/
|
||||
public constructor(store: StorageService, repo: ItemRepositoryService) {
|
||||
public constructor(store: StorageService, repo: ItemRepositoryService, private translate: TranslateService) {
|
||||
super(store, repo);
|
||||
this.filterOptions = [
|
||||
{
|
||||
@ -30,7 +32,10 @@ export class AgendaFilterListService extends BaseFilterListService<Item, ViewIte
|
||||
{
|
||||
label: 'Status',
|
||||
property: 'closed',
|
||||
options: [{ label: 'Open', condition: false }, { label: 'Closed', condition: true }]
|
||||
options: [
|
||||
{ label: this.translate.instant('Open items'), condition: false },
|
||||
{ label: this.translate.instant('Closed items'), condition: true }
|
||||
]
|
||||
}
|
||||
];
|
||||
this.updateFilterDefinitions(this.filterOptions);
|
||||
|
@ -33,7 +33,7 @@ export class AssignmentListComponent extends ListViewBaseComponent<ViewAssignmen
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
public repo: AssignmentRepositoryService,
|
||||
private promptService: PromptService,
|
||||
@ -83,8 +83,8 @@ export class AssignmentListComponent extends ListViewBaseComponent<ViewAssignmen
|
||||
* is only filled with any data in multiSelect mode
|
||||
*/
|
||||
public async deleteSelected(): Promise<void> {
|
||||
const content = this.translate.instant('This will delete all selected assignments.');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete all selected elections?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
for (const assignment of this.selectedRows) {
|
||||
await this.repo.delete(assignment);
|
||||
}
|
||||
|
@ -178,8 +178,9 @@ export class MediafileListComponent extends ListViewBaseComponent<ViewMediafile,
|
||||
* @param file the file to delete
|
||||
*/
|
||||
public async onDelete(file: ViewMediafile): Promise<void> {
|
||||
const content = this.translate.instant('Do you want to delete this file?') + `<p><strong>${file}</strong>`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this file?');
|
||||
const content = file.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(file);
|
||||
}
|
||||
}
|
||||
@ -189,8 +190,8 @@ export class MediafileListComponent extends ListViewBaseComponent<ViewMediafile,
|
||||
* will be made available in multiSelect mode
|
||||
*/
|
||||
public async deleteSelected(): Promise<void> {
|
||||
const content = this.translate.instant('All selected files will be deleted!');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete all selected files?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
for (const mediafile of this.selectedRows) {
|
||||
await this.repo.delete(mediafile);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import { ViewMotionBlock } from './view-motion-block';
|
||||
import { BaseViewModel } from 'app/site/base/base-view-model';
|
||||
import { ConfigService } from 'app/core/ui-services/config.service';
|
||||
import { ViewMotionChangeRecommendation } from './view-change-recommendation';
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
/**
|
||||
* The line numbering mode for the motion detail view.
|
||||
@ -610,7 +611,7 @@ export class ViewMotion extends BaseAgendaViewModel implements Searchable {
|
||||
if (this.changeRecommendations && this.changeRecommendations.length) {
|
||||
slideOptions.push({
|
||||
key: 'mode',
|
||||
displayName: 'Which version?',
|
||||
displayName: _('Which version?'),
|
||||
default: configService.instant('motions_recommendation_text_mode'),
|
||||
choices: [
|
||||
{ value: 'original', displayName: 'Original version' },
|
||||
|
@ -58,7 +58,7 @@ export class CategoryListComponent extends BaseViewComponent implements OnInit {
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: CategoryRepositoryService,
|
||||
private motionRepo: MotionRepositoryService,
|
||||
@ -173,8 +173,9 @@ export class CategoryListComponent extends BaseViewComponent implements OnInit {
|
||||
* @param viewCategory The category to delete
|
||||
*/
|
||||
public async onDeleteButton(viewCategory: ViewCategory): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${viewCategory.name}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this category?');
|
||||
const content = viewCategory.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(viewCategory).then(() => this.onCancelButton(), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ export class CategorySortComponent extends BaseViewComponent implements OnInit {
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private promptService: PromptService,
|
||||
private repo: CategoryRepositoryService,
|
||||
@ -107,8 +107,9 @@ export class CategorySortComponent extends BaseViewComponent implements OnInit {
|
||||
*/
|
||||
public async onNumberMotions(): Promise<void> {
|
||||
if (this.sortSelector) {
|
||||
const content = this.translate.instant('This will change the identifier for the motions of this category.');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to renumber all motions of this category?');
|
||||
const content = this.category.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
const sortedMotionIds = this.sortSelector.array.map(selectable => selectable.id);
|
||||
await this.repo
|
||||
.numberMotionsInCategory(this.category.category, sortedMotionIds)
|
||||
|
@ -131,10 +131,11 @@ export class MotionBlockDetailComponent extends ListViewBaseComponent<ViewMotion
|
||||
* Click handler for recommendation button
|
||||
*/
|
||||
public async onFollowRecButton(): Promise<void> {
|
||||
const content = this.translate.instant(
|
||||
`Are you sure you want to override the state of all motions of this motion block?`
|
||||
const title = this.translate.instant(
|
||||
'Are you sure you want to override the state of all motions of this motion block?'
|
||||
);
|
||||
if (await this.promptService.open(this.block.title, content)) {
|
||||
const content = this.block.title;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.followRecommendation(this.block);
|
||||
}
|
||||
}
|
||||
@ -153,8 +154,9 @@ export class MotionBlockDetailComponent extends ListViewBaseComponent<ViewMotion
|
||||
* Click handler to delete motion blocks
|
||||
*/
|
||||
public async onDeleteBlockButton(): Promise<void> {
|
||||
const content = this.translate.instant('Are you sure you want to delete this motion block?');
|
||||
if (await this.promptService.open(this.block.title, content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this motion block?');
|
||||
const content = this.block.title;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
await this.repo.delete(this.block);
|
||||
this.router.navigate(['../'], { relativeTo: this.route });
|
||||
}
|
||||
@ -166,8 +168,9 @@ export class MotionBlockDetailComponent extends ListViewBaseComponent<ViewMotion
|
||||
* @param motion the corresponding motion
|
||||
*/
|
||||
public async onRemoveMotionButton(motion: ViewMotion): Promise<void> {
|
||||
const content = this.translate.instant('Are you sure you want to remove this motion from motion block?');
|
||||
if (await this.promptService.open(motion.title, content)) {
|
||||
const title = this.translate.instant('Are you sure you want to remove this motion from motion block?');
|
||||
const content = motion.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.removeMotionFromBlock(motion);
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
<p>
|
||||
<os-search-value-selector
|
||||
ngDefaultControl
|
||||
listname="{{ 'Parent item' | translate }}"
|
||||
listname="{{ 'Parent agenda item' | translate }}"
|
||||
[form]="createBlockForm"
|
||||
[formControl]="createBlockForm.get('agenda_parent_id')"
|
||||
[multiple]="false"
|
||||
|
@ -157,8 +157,9 @@ export class MotionBlockListComponent extends ListViewBaseComponent<ViewMotionBl
|
||||
* @param motionBlock the block to delete
|
||||
*/
|
||||
public async onDelete(motionBlock: ViewMotionBlock): Promise<void> {
|
||||
const content = this.translate.instant('Are you sure you want to delete this motion block?');
|
||||
if (await this.promptService.open(motionBlock.title, content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this motion block?');
|
||||
const content = motionBlock.title;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
await this.repo.delete(motionBlock);
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ export class MotionCommentSectionListComponent extends BaseViewComponent impleme
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: MotionCommentSectionRepositoryService,
|
||||
private formBuilder: FormBuilder,
|
||||
@ -164,8 +164,9 @@ export class MotionCommentSectionListComponent extends BaseViewComponent impleme
|
||||
* @param viewSection The section to delete
|
||||
*/
|
||||
public async onDeleteButton(viewSection: ViewMotionCommentSection): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${viewSection.name}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this comment field?');
|
||||
const content = viewSection.name;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(viewSection).then(() => (this.openId = this.editId = null), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ export class AmendmentCreateWizardComponent extends BaseViewComponent {
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
private configService: ConfigService,
|
||||
private formBuilder: FormBuilder,
|
||||
private repo: MotionRepositoryService,
|
||||
|
@ -79,7 +79,7 @@ export class MotionDetailDiffComponent extends BaseViewComponent implements Afte
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private sanitizer: DomSanitizer,
|
||||
private motionRepo: MotionRepositoryService,
|
||||
@ -277,8 +277,8 @@ export class MotionDetailDiffComponent extends BaseViewComponent implements Afte
|
||||
public async deleteChangeRecommendation(reco: ViewMotionChangeRecommendation, $event: MouseEvent): Promise<void> {
|
||||
$event.stopPropagation();
|
||||
$event.preventDefault();
|
||||
const content = this.translate.instant('Delete this change recommendation');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this change recommendation?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
this.recoRepo.delete(reco).then(null, this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -708,19 +708,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Parent item -->
|
||||
<div class="content-field" *ngIf="newMotion && agendaItemObserver.value.length > 0">
|
||||
<os-search-value-selector
|
||||
ngDefaultControl
|
||||
[form]="contentForm"
|
||||
[formControl]="contentForm.get('agenda_parent_id')"
|
||||
[multiple]="false"
|
||||
[includeNone]="true"
|
||||
listname="{{ 'Parent item' | translate }}"
|
||||
[InputListValues]="agendaItemObserver"
|
||||
></os-search-value-selector>
|
||||
</div>
|
||||
|
||||
<!-- Visibility -->
|
||||
<div class="content-field" *ngIf="newMotion">
|
||||
<mat-form-field>
|
||||
@ -732,6 +719,19 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
<!-- Parent item -->
|
||||
<div class="content-field" *ngIf="newMotion && agendaItemObserver.value.length > 0">
|
||||
<os-search-value-selector
|
||||
ngDefaultControl
|
||||
[form]="contentForm"
|
||||
[formControl]="contentForm.get('agenda_parent_id')"
|
||||
[multiple]="false"
|
||||
[includeNone]="true"
|
||||
listname="{{ 'Parent agenda item' | translate }}"
|
||||
[InputListValues]="agendaItemObserver"
|
||||
></os-search-value-selector>
|
||||
</div>
|
||||
|
||||
<!-- Supporter form -->
|
||||
<div class="content-field" *ngIf="editMotion && minSupporters">
|
||||
<div *ngIf="perms.isAllowed('change_metadata', motion)">
|
||||
|
@ -377,7 +377,7 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
public vp: ViewportService,
|
||||
public operator: OperatorService,
|
||||
@ -855,7 +855,8 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
*/
|
||||
public async deleteMotionButton(): Promise<void> {
|
||||
const title = this.translate.instant('Are you sure you want to delete this motion?');
|
||||
if (await this.promptService.open(title, this.motion.getTitle())) {
|
||||
const content = this.motion.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
await this.repo.delete(this.motion);
|
||||
this.router.navigate(['./motions/']);
|
||||
}
|
||||
@ -1001,8 +1002,10 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
try {
|
||||
// Just confirm this, if there is one modified final version the user would override.
|
||||
if (this.motion.modified_final_version) {
|
||||
const content = this.translate.instant('Are you sure to copy the final version to the print template?');
|
||||
if (await this.promptService.open(this.motion.title, content)) {
|
||||
const title = this.translate.instant(
|
||||
'Are you sure you want to copy the final version to the print template?'
|
||||
);
|
||||
if (await this.promptService.open(title, null)) {
|
||||
await this.updateMotion({ modified_final_version: finalVersion }, this.motion);
|
||||
}
|
||||
} else {
|
||||
@ -1018,8 +1021,8 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
|
||||
* Deletes the modified final version
|
||||
*/
|
||||
public async deleteModifiedFinalVersion(): Promise<void> {
|
||||
const content = this.translate.instant('Are you sure to delete the print template?');
|
||||
if (await this.promptService.open(this.motion.title, content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete the print template?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
this.updateMotion({ modified_final_version: '' }, this.motion).then(
|
||||
() => this.setChangeRecoMode(ChangeRecoMode.Final),
|
||||
this.raiseError
|
||||
|
@ -1,4 +1,4 @@
|
||||
<h2><span translate>Voting result</span></h2>
|
||||
<h2 translate>Voting result</h2>
|
||||
<div class="meta-text">
|
||||
<span translate>Special values</span>:<br />
|
||||
<mat-chip>-1</mat-chip> =
|
||||
@ -14,7 +14,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="submit-buttons">
|
||||
<button mat-button (click)="cancel()" translate>Cancel</button>
|
||||
<button mat-button (click)="submit()" translate>Save</button>
|
||||
<button mat-button (click)="submit()">{{ 'Save' | translate }}</button>
|
||||
<button mat-button (click)="cancel()">{{ 'Cancel' | translate }}</button>
|
||||
</div>
|
||||
|
||||
|
@ -118,8 +118,8 @@ export class MotionPollComponent implements OnInit {
|
||||
* Sends a delete request for this poll after a confirmation dialog has been accepted.
|
||||
*/
|
||||
public async deletePoll(): Promise<void> {
|
||||
const content = this.translate.instant('Are you sure you want to delete this vote?');
|
||||
if (await this.promptService.open('Delete vote?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this vote?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
this.motionRepo.deletePoll(this.poll);
|
||||
}
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ export class MotionListComponent extends ListViewBaseComponent<ViewMotion, Motio
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
sortService: MotionSortListService,
|
||||
filterService: MotionFilterListService,
|
||||
|
@ -145,7 +145,7 @@ export class WorkflowDetailComponent extends BaseViewComponent implements OnInit
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private promtService: PromptService,
|
||||
private dialog: MatDialog,
|
||||
|
@ -97,8 +97,9 @@ export class WorkflowListComponent extends ListViewBaseComponent<ViewWorkflow, W
|
||||
* @param selected the selected workflow
|
||||
*/
|
||||
public async onDeleteWorkflow(selected: ViewWorkflow): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${selected}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this workflow?');
|
||||
const content = selected.getTitle();
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.workflowRepo.delete(selected).then(() => {}, this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ export class StatuteParagraphListComponent extends BaseViewComponent implements
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: StatuteParagraphRepositoryService,
|
||||
private formBuilder: FormBuilder,
|
||||
@ -136,8 +136,9 @@ export class StatuteParagraphListComponent extends BaseViewComponent implements
|
||||
* @param viewStatuteParagraph The statute paragraph to delete
|
||||
*/
|
||||
public async onDeleteButton(viewStatuteParagraph: ViewStatuteParagraph): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${viewStatuteParagraph.title}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this statute paragraph?');
|
||||
const content = viewStatuteParagraph.title;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(viewStatuteParagraph).then(() => (this.openId = this.editId = null), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -61,8 +61,8 @@ export class MotionMultiselectService {
|
||||
* @param motions The motions to delete
|
||||
*/
|
||||
public async delete(motions: ViewMotion[]): Promise<void> {
|
||||
const content = this.translate.instant('This will delete all selected motions.');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete all selected motions?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
for (const motion of motions) {
|
||||
await this.repo.delete(motion);
|
||||
}
|
||||
@ -239,7 +239,7 @@ export class MotionMultiselectService {
|
||||
*/
|
||||
public async setMotionBlock(motions: ViewMotion[]): Promise<void> {
|
||||
const title = this.translate.instant('This will set the following motion block for all selected motions:');
|
||||
const clearChoice = 'Clear motion block';
|
||||
const clearChoice = this.translate.instant('Clear motion block');
|
||||
const selectedChoice = await this.choiceService.open(
|
||||
title,
|
||||
this.motionBlockRepo.getViewModelList(),
|
||||
|
@ -5,6 +5,7 @@ import { ViewMotion } from '../models/view-motion';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { StorageService } from 'app/core/core-services/storage.service';
|
||||
import { ConfigService } from 'app/core/ui-services/config.service';
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -21,8 +22,8 @@ export class MotionSortListService extends BaseSortListService<ViewMotion> {
|
||||
{ property: 'category' },
|
||||
{ property: 'motion_block_id', label: 'Motion block' },
|
||||
{ property: 'state' },
|
||||
{ property: 'creationDate', label: this.translate.instant('Creation date') },
|
||||
{ property: 'lastChangeDate', label: this.translate.instant('Last modified') }
|
||||
{ property: 'creationDate', label: _('Creation date') },
|
||||
{ property: 'lastChangeDate', label: _('Last modified') }
|
||||
]
|
||||
};
|
||||
protected name = 'Motion';
|
||||
|
@ -40,7 +40,7 @@ export class CountdownListComponent extends BaseViewComponent implements OnInit
|
||||
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: CountdownRepositoryService,
|
||||
private formBuilder: FormBuilder,
|
||||
@ -152,8 +152,9 @@ export class CountdownListComponent extends BaseViewComponent implements OnInit
|
||||
* @param countdown The countdown to delete
|
||||
*/
|
||||
public async onDeleteButton(countdown: ViewCountdown): Promise<void> {
|
||||
const content = this.translate.instant('Delete countdown') + ` ${this.translate.instant(countdown.title)}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this countdown?');
|
||||
const content = countdown.title;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(countdown).then(() => (this.openId = this.editId = null), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -172,7 +172,7 @@
|
||||
<!-- Previous Slides -->
|
||||
<mat-expansion-panel *ngIf="projector.elements_history.length" class="previous-slides">
|
||||
<mat-expansion-panel-header>
|
||||
<span translate>History</span>
|
||||
<span translate>Previous slides</span>
|
||||
</mat-expansion-panel-header>
|
||||
<p *ngFor="let elements of projector.elements_history; let i = index">
|
||||
{{ i + 1 }}. {{ getSlideTitle(elements[0]) }}
|
||||
@ -228,16 +228,6 @@
|
||||
<span translate>Current list of speakers</span>
|
||||
</mat-expansion-panel-header>
|
||||
|
||||
<!-- Overlay -->
|
||||
<mat-list>
|
||||
<mat-list-item [ngClass]="{ projected: isClosProjected(true) }">
|
||||
<button type="button" mat-icon-button (click)="toggleClos(true)">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
<span translate>Overlay</span>
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
|
||||
<!-- Slide-->
|
||||
<mat-list *ngIf="projectorCount > 1">
|
||||
<mat-list-item [ngClass]="{ projected: isClosProjected(false) }">
|
||||
@ -248,6 +238,16 @@
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
|
||||
<!-- Overlay -->
|
||||
<mat-list>
|
||||
<mat-list-item [ngClass]="{ projected: isClosProjected(true) }">
|
||||
<button type="button" mat-icon-button (click)="toggleClos(true)">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
<span translate>Overlay</span>
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
|
||||
<!-- Chyron -->
|
||||
<mat-list>
|
||||
<mat-list-item [ngClass]="{ projected: isChyronProjected() }">
|
||||
|
@ -14,10 +14,10 @@
|
||||
</div>
|
||||
</os-head-bar>
|
||||
|
||||
<mat-card *ngIf="!projectorToCreate && projectors">
|
||||
<mat-card *ngIf="!projectorToCreate && projectors && projectors.length > 1">
|
||||
<span translate>
|
||||
Reference projector for current list of speakers:
|
||||
</span>
|
||||
</span>
|
||||
<mat-form-field>
|
||||
<mat-select [disabled]="!!editId" [value]="projectors[0].reference_projector_id" (selectionChange)="onSelectReferenceProjector($event)">
|
||||
<mat-option *ngFor="let projector of projectors" [value]="projector.id">
|
||||
|
@ -85,7 +85,7 @@ export class ProjectorListComponent extends BaseViewComponent implements OnInit
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: ProjectorRepositoryService,
|
||||
private formBuilder: FormBuilder,
|
||||
@ -254,8 +254,9 @@ export class ProjectorListComponent extends BaseViewComponent implements OnInit
|
||||
* @param projector The projector to delete
|
||||
*/
|
||||
public async onDeleteButton(projector: ViewProjector): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${projector.name}?`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this projector?');
|
||||
const content = projector.name;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(projector).then(null, this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ export class ProjectorMessageListComponent extends BaseViewComponent implements
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: ProjectorMessageRepositoryService,
|
||||
private formBuilder: FormBuilder,
|
||||
@ -127,8 +127,8 @@ export class ProjectorMessageListComponent extends BaseViewComponent implements
|
||||
* @param message The message to delete
|
||||
*/
|
||||
public async onDeleteButton(message: ViewProjectorMessage): Promise<void> {
|
||||
const content = this.translate.instant('Delete this message?');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete the selected message?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
this.repo.delete(message).then(() => (this.openId = this.editId = null), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ export class TagListComponent extends ListViewBaseComponent<ViewTag, Tag> implem
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: TagRepositoryService,
|
||||
private promptService: PromptService
|
||||
@ -102,8 +102,9 @@ export class TagListComponent extends ListViewBaseComponent<ViewTag, Tag> implem
|
||||
* Deletes the selected Tag after a successful confirmation.
|
||||
*/
|
||||
public async deleteSelectedTag(): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${this.selectedTag.name}?`;
|
||||
if (await this.promptService.open(this.translate.instant('Are you sure?'), content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this tag?');
|
||||
const content = this.selectedTag.name;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(this.selectedTag).then(() => this.cancelEditing(), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ export class GroupListComponent extends BaseViewComponent implements OnInit {
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
public repo: GroupRepositoryService,
|
||||
private promptService: PromptService
|
||||
@ -131,8 +131,9 @@ export class GroupListComponent extends BaseViewComponent implements OnInit {
|
||||
* Deletes the selected Group
|
||||
*/
|
||||
public async deleteSelectedGroup(): Promise<void> {
|
||||
const content = this.translate.instant('Delete') + ` ${this.selectedGroup.name}?`;
|
||||
if (await this.promptService.open(this.translate.instant('Are you sure?'), content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this group?');
|
||||
const content = this.translate.instant(this.selectedGroup.name);
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(this.selectedGroup).then(() => this.cancelEditing(), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ export class PasswordComponent extends BaseViewComponent implements OnInit {
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
@ -150,7 +150,7 @@ export class PasswordComponent extends BaseViewComponent implements OnInit {
|
||||
const newPassword2 = this.userPasswordForm.value.newPassword2;
|
||||
|
||||
if (newPassword1 !== newPassword2) {
|
||||
this.raiseError(this.translate.instant('New passwords do not match'));
|
||||
this.raiseError(this.translate.instant('Error: The new passwords do not match.'));
|
||||
} else {
|
||||
await this.repo.setNewPassword(oldPassword, newPassword1);
|
||||
this.router.navigate(['./']);
|
||||
|
@ -14,10 +14,10 @@
|
||||
(keyup)="onKeyUp($event)"
|
||||
/>
|
||||
</mat-form-field>
|
||||
<button mat-button (click)="changePresence()" translate>Change presence</button>
|
||||
<button mat-button (click)="changePresence()">{{ 'Change presence' | translate }}</button>
|
||||
<mat-card *ngIf="lastChangedUser" [ngClass]="lastChangedUser.is_present ? 'success' : 'warning'">
|
||||
<span>{{ lastChangedUser.full_name }} </span> <span translate>is now</span>
|
||||
<span> {{ lastChangedUser.is_present ? 'present' : ('not present' | translate) }}</span>
|
||||
<span>{{ lastChangedUser.full_name }} </span> <span translate>is now</span>:
|
||||
<span> {{ lastChangedUser.is_present ? ('present' | translate) : ('absent' | translate) }}</span>
|
||||
</mat-card>
|
||||
<mat-card *ngIf="errorMsg" class="error"> {{ errorMsg | translate }} </mat-card>
|
||||
<mat-card *ngIf="errorMsg" class="error">{{ errorMsg | translate }}</mat-card>
|
||||
</mat-card>
|
||||
|
@ -87,7 +87,7 @@ export class UserDetailComponent extends BaseViewComponent implements OnInit {
|
||||
*/
|
||||
public constructor(
|
||||
title: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private formBuilder: FormBuilder,
|
||||
private route: ActivatedRoute,
|
||||
@ -377,10 +377,9 @@ export class UserDetailComponent extends BaseViewComponent implements OnInit {
|
||||
* click on the delete user button
|
||||
*/
|
||||
public async deleteUserButton(): Promise<void> {
|
||||
const content =
|
||||
this.translate.instant('Do you want to delete this participant?') +
|
||||
`<p><strong>${this.user.full_name}</strong>`;
|
||||
if (await this.promptService.open(this.translate.instant('Are you sure?'), content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete this participant?');
|
||||
const content = this.user.full_name;
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.delete(this.user).then(() => this.router.navigate(['./users/']), this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import { OperatorService } from 'app/core/core-services/operator.service';
|
||||
import { ViewUser } from '../../models/view-user';
|
||||
import { ViewGroup } from '../../models/view-group';
|
||||
import { genders, User } from 'app/shared/models/users/user';
|
||||
import { _ } from 'app/core/translate/translation-marker';
|
||||
|
||||
/**
|
||||
* Interface for the short editing dialog.
|
||||
@ -130,7 +131,7 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
*/
|
||||
public constructor(
|
||||
titleService: Title,
|
||||
translate: TranslateService,
|
||||
protected translate: TranslateService, // protected required for ng-translate-extract
|
||||
matSnackBar: MatSnackBar,
|
||||
private repo: UserRepositoryService,
|
||||
private groupRepo: GroupRepositoryService,
|
||||
@ -268,8 +269,8 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
* Bulk deletes users. Needs multiSelect mode to fill selectedRows
|
||||
*/
|
||||
public async deleteSelected(): Promise<void> {
|
||||
const content = this.translate.instant('This will delete all selected users.');
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to delete all selected participants?');
|
||||
if (await this.promptService.open(title, null)) {
|
||||
for (const user of this.selectedRows) {
|
||||
await this.repo.delete(user);
|
||||
}
|
||||
@ -281,8 +282,10 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
* SelectedRows is only filled with data in multiSelect mode
|
||||
*/
|
||||
public async setGroupSelected(): Promise<void> {
|
||||
const content = this.translate.instant('This will add or remove the following groups for all selected users:');
|
||||
const choices = ['Add group(s)', 'Remove group(s)'];
|
||||
const content = this.translate.instant(
|
||||
'This will add or remove the following groups for all selected participants:'
|
||||
);
|
||||
const choices = [_('add group(s)'), _('remove group(s)')];
|
||||
const selectedChoice = await this.choiceService.open(content, this.groupRepo.getViewModelList(), true, choices);
|
||||
if (selectedChoice) {
|
||||
for (const user of this.selectedRows) {
|
||||
@ -305,8 +308,8 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
* Uses selectedRows defined via multiSelect mode.
|
||||
*/
|
||||
public async setActiveSelected(): Promise<void> {
|
||||
const content = this.translate.instant('Set the active status for the selected users');
|
||||
const options = ['Active', 'Not active'];
|
||||
const content = this.translate.instant('Set active status for selected participants:');
|
||||
const options = [_('active'), _('inactive')];
|
||||
const selectedChoice = await this.choiceService.open(content, null, false, options);
|
||||
if (selectedChoice) {
|
||||
const active = selectedChoice.action === options[0];
|
||||
@ -321,8 +324,8 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
* Uses selectedRows defined via multiSelect mode.
|
||||
*/
|
||||
public async setPresentSelected(): Promise<void> {
|
||||
const content = this.translate.instant('Set the presence status for the selected users');
|
||||
const options = ['Present', 'Not present'];
|
||||
const content = this.translate.instant('Set presence status for selected participants:');
|
||||
const options = [_('present'), _('absent')];
|
||||
const selectedChoice = await this.choiceService.open(content, null, false, options);
|
||||
if (selectedChoice) {
|
||||
const present = selectedChoice.action === options[0];
|
||||
@ -337,8 +340,8 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
* Uses selectedRows defined via multiSelect mode.
|
||||
*/
|
||||
public async setCommitteeSelected(): Promise<void> {
|
||||
const content = this.translate.instant('Sets/unsets the committee status for the selected users');
|
||||
const options = ['Is committee', 'Is not committee'];
|
||||
const content = this.translate.instant('Set committee status for selected participants:');
|
||||
const options = [_('committee'), _('no committee')];
|
||||
const selectedChoice = await this.choiceService.open(content, null, false, options);
|
||||
if (selectedChoice) {
|
||||
const committee = selectedChoice.action === options[0];
|
||||
@ -353,10 +356,9 @@ export class UserListComponent extends ListViewBaseComponent<ViewUser, User> imp
|
||||
* multiSelect mode.
|
||||
*/
|
||||
public async sendInvitationEmailSelected(): Promise<void> {
|
||||
const content =
|
||||
this.translate.instant('Send invitation e-Mails to the selected users?') +
|
||||
` (${this.selectedRows.length} E-Mails)`;
|
||||
if (await this.promptService.open('Are you sure?', content)) {
|
||||
const title = this.translate.instant('Are you sure you want to send emails to all selected participants?');
|
||||
const content = this.selectedRows.length + ' ' + this.translate.instant('emails');
|
||||
if (await this.promptService.open(title, content)) {
|
||||
this.repo.sendInvitationEmail(this.selectedRows).then(this.raiseError, this.raiseError);
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,10 @@ export class UserFilterListService extends BaseFilterListService<User, ViewUser>
|
||||
property: 'is_present',
|
||||
label: 'Presence',
|
||||
isActive: false,
|
||||
options: [{ condition: true, label: 'Is present' }, { condition: false, label: 'Is not present' }]
|
||||
options: [
|
||||
{ condition: true, label: this.translate.instant('Is present') },
|
||||
{ condition: false, label: this.translate.instant('Is not present') }
|
||||
]
|
||||
},
|
||||
{
|
||||
property: 'is_active',
|
||||
@ -48,7 +51,7 @@ export class UserFilterListService extends BaseFilterListService<User, ViewUser>
|
||||
},
|
||||
{
|
||||
property: 'is_last_email_send',
|
||||
label: 'Last email send',
|
||||
label: this.translate.instant('Last email send'),
|
||||
isActive: false,
|
||||
options: [
|
||||
{ condition: true, label: this.translate.instant('Got an email') },
|
||||
|
File diff suppressed because one or more lines are too long
@ -125,9 +125,6 @@ msgstr "Sichtbarkeit in der Tagesordnung"
|
||||
msgid "All casted ballots"
|
||||
msgstr "Alle abgegebenen Stimmzettel"
|
||||
|
||||
msgid "All selected files will be deleted!"
|
||||
msgstr "Alle ausgewählten Dateien werden gelöscht!"
|
||||
|
||||
msgid "All valid ballots"
|
||||
msgstr "Alle gültigen Stimmzettel"
|
||||
|
||||
@ -180,12 +177,89 @@ msgstr "Ein unbekannter Fehler ist aufgetreten."
|
||||
msgid "Arabic"
|
||||
msgstr "Arabisch"
|
||||
|
||||
msgid "Are you sure you want to copy the final version to the print template?"
|
||||
msgstr ""
|
||||
"Soll die Beschlussfassung weiter bearbeitet und eine Beschluss-Druckvorlage "
|
||||
"erstellt werden?"
|
||||
|
||||
msgid "Are you sure you want to delete all selected elections?"
|
||||
msgstr "Sollen alle ausgewählten Wahlen wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete all selected files?"
|
||||
msgstr "Sollen alle ausgewählten Dateien wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete all selected items?"
|
||||
msgstr "Sollen alle ausgewählten Dateien wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete all selected motions?"
|
||||
msgstr "Sollen alle ausgewählten Anträge wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete all selected participants?"
|
||||
msgstr "Sollen alle ausgewählten Teilnehmende wirklich gelöscht werden?"
|
||||
|
||||
msgid ""
|
||||
"Are you sure you want to delete all speakers from this list of speakers?"
|
||||
msgstr "Sollen wirklich alle Redner/innen von dieser Liste entfernt werden?"
|
||||
|
||||
msgid "Are you sure you want to delete the print template?"
|
||||
msgstr "Soll die Beschluss-Druckvorlage wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete the selected message?"
|
||||
msgstr "Soll die ausgewählte Mitteilung wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this category?"
|
||||
msgstr "Soll dieses Sachgebiet wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this change recommendation?"
|
||||
msgstr "Soll diese Änderungsempfehlung wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this comment field?"
|
||||
msgstr "Soll dieses Kommentarfeld wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this countdown?"
|
||||
msgstr "Soll dieser Countdown wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this entry?"
|
||||
msgstr "Soll dieser Eintrag wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this file?"
|
||||
msgstr "Soll diese Datei wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this group?"
|
||||
msgstr "Soll diese Gruppe wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this motion?"
|
||||
msgstr "Soll dieser Antrag wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this participant?"
|
||||
msgstr "Soll diese/r Teilnehmende wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this projector?"
|
||||
msgstr "Soll dieser Projektor wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this statute paragraph?"
|
||||
msgstr "Soll dieser Satzungsabschnitt wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this tag?"
|
||||
msgstr "Soll dieses Schlagwort wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this vote?"
|
||||
msgstr "Soll diese Abstimmung wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to delete this workflow?"
|
||||
msgstr "Soll dieser Arbeitsablauf wirklich gelöscht werden?"
|
||||
|
||||
msgid "Are you sure you want to number all agenda items?"
|
||||
msgstr "Sollen alle Tagesordnungspunkte wirklich neu nummeriert werden?"
|
||||
|
||||
msgid "Are you sure you want to renumber all motions of this category?"
|
||||
msgstr ""
|
||||
"Sollen alle Anträge dieses Sachgebiets wirklich neu nummeriert werden?"
|
||||
|
||||
msgid "Are you sure you want to send emails to all selected participants?"
|
||||
msgstr ""
|
||||
"Sollen E-Mails wirklich an alle ausgewählten Teilnehmende gesendet werden?"
|
||||
|
||||
msgid ""
|
||||
"At least given name or surname have to be filled in. All other fields are "
|
||||
"optional and may be empty."
|
||||
@ -391,6 +465,9 @@ msgstr "Alle löschen"
|
||||
msgid "Clear list"
|
||||
msgstr "Liste leeren"
|
||||
|
||||
msgid "Clear motion block"
|
||||
msgstr "Antragsblock löschen"
|
||||
|
||||
msgid "Clear tags"
|
||||
msgstr "Schlagwörter löschen"
|
||||
|
||||
@ -400,6 +477,9 @@ msgstr "Schließen"
|
||||
msgid "Close list of speakers"
|
||||
msgstr "Redeliste schließen"
|
||||
|
||||
msgid "Closed items"
|
||||
msgstr "Erledigte Einträge"
|
||||
|
||||
msgid "Collapse all"
|
||||
msgstr "Alle zusammenklappen"
|
||||
|
||||
@ -455,6 +535,9 @@ msgstr "Beschluss-Druckvorlage erstellen"
|
||||
msgid "Create new category"
|
||||
msgstr "Neues Sachgebiet erstellen"
|
||||
|
||||
msgid "Create new state"
|
||||
msgstr "Neuen Status erstellen"
|
||||
|
||||
msgid "Create new workflow"
|
||||
msgstr "Neuen Arbeitsablauf erstellen"
|
||||
|
||||
@ -467,9 +550,6 @@ msgstr "Aktuelle Browsersprache"
|
||||
msgid "Current list of speakers"
|
||||
msgstr "Aktuelle Redeliste"
|
||||
|
||||
msgid "Current list of speakers reference"
|
||||
msgstr "Referenz zur aktuellen Redeliste"
|
||||
|
||||
msgid "Custom number of ballot papers"
|
||||
msgstr "Benutzerdefinierte Anzahl von Stimmzetteln"
|
||||
|
||||
@ -584,9 +664,6 @@ msgstr "Nicht befassen"
|
||||
msgid "Do not decide"
|
||||
msgstr "Nicht entscheiden"
|
||||
|
||||
msgid "Do you want to delete this file?"
|
||||
msgstr "Soll diese Datei wirklich gelöscht werden?"
|
||||
|
||||
msgid "Does not have notes"
|
||||
msgstr "Hat keine Notizen"
|
||||
|
||||
@ -701,6 +778,12 @@ msgstr ""
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
msgid "Error: The new passwords do not match."
|
||||
msgstr "Fehler: Die neuen Passwörter stimmen nicht überein."
|
||||
|
||||
msgid "Estimated end"
|
||||
msgstr "Voraussichtliches Ende"
|
||||
|
||||
msgid "Event"
|
||||
msgstr "Veranstaltung"
|
||||
|
||||
@ -785,6 +868,9 @@ msgstr "Empfehlung folgen"
|
||||
msgid "Follow recommendations for all motions"
|
||||
msgstr "Empfehlungen für alle Anträge folgen"
|
||||
|
||||
msgid "Following users are currently editing this motion:"
|
||||
msgstr "Folgende Nutzer bearbeiten aktuell diesen Antrag:"
|
||||
|
||||
msgid "Forgot Password?"
|
||||
msgstr "Passwort vergessen?"
|
||||
|
||||
@ -827,6 +913,9 @@ msgstr "Gruppen mit Leseberechtigungen"
|
||||
msgid "Groups with write permissions"
|
||||
msgstr "Gruppen mit Schreibberechtigungen"
|
||||
|
||||
msgid "Guest"
|
||||
msgstr "Gast"
|
||||
|
||||
msgid "Has notes"
|
||||
msgstr "Hat Notizen"
|
||||
|
||||
@ -933,6 +1022,9 @@ msgstr "Ungültige Eingabe."
|
||||
msgid "Invalid line number"
|
||||
msgstr "Ungültige Zeilennummer"
|
||||
|
||||
msgid "Invalid votes"
|
||||
msgstr "Ungültige Stimmen"
|
||||
|
||||
msgid "Is PDF file"
|
||||
msgstr "Ist eine PDF-Datei"
|
||||
|
||||
@ -963,6 +1055,9 @@ msgstr "Ist nicht aktiv"
|
||||
msgid "Is not favorite"
|
||||
msgstr "Ist kein Favorit"
|
||||
|
||||
msgid "Is not present"
|
||||
msgstr "Ist nicht anwesend"
|
||||
|
||||
msgid "Is present"
|
||||
msgstr "Ist anwesend"
|
||||
|
||||
@ -978,6 +1073,9 @@ msgstr "Verwenden Sie eine Zeile pro Person."
|
||||
msgid "Label color"
|
||||
msgstr "Beschriftungsfarbe"
|
||||
|
||||
msgid "Last email send"
|
||||
msgstr "Letzte gesendet E-Mail"
|
||||
|
||||
msgid "Last modified"
|
||||
msgstr "Zuletzt geändert"
|
||||
|
||||
@ -1023,9 +1121,6 @@ msgstr "Als Gast anmelden"
|
||||
msgid "Logout"
|
||||
msgstr "Abmelden"
|
||||
|
||||
msgid "Manage the list of speakers for..."
|
||||
msgstr "Redeliste verwalten für..."
|
||||
|
||||
msgid "Mark speaker"
|
||||
msgstr "Redner/in markieren"
|
||||
|
||||
@ -1280,6 +1375,9 @@ msgstr "Nur Haupt-Tagesordnungspunkte"
|
||||
msgid "Open"
|
||||
msgstr "Öffnen"
|
||||
|
||||
msgid "Open items"
|
||||
msgstr "Offene Einträge"
|
||||
|
||||
msgid "Open list of speakers"
|
||||
msgstr "Redeliste öffnen"
|
||||
|
||||
@ -1328,8 +1426,8 @@ msgstr "Absatzbasiert mit Änderungsdarstellung"
|
||||
msgid "Parallel upload"
|
||||
msgstr "Parallel hochladen"
|
||||
|
||||
msgid "Parent item"
|
||||
msgstr "Elternelement"
|
||||
msgid "Parent agenda item"
|
||||
msgstr "Elternelement in der Tagesordnung"
|
||||
|
||||
msgid "Participant cannot be found"
|
||||
msgstr "Teilnehmende wurde nicht gefunden"
|
||||
@ -1422,6 +1520,9 @@ msgstr "Vorschau"
|
||||
msgid "Previous"
|
||||
msgstr "Zurück"
|
||||
|
||||
msgid "Previous slides"
|
||||
msgstr "Letzte Folien"
|
||||
|
||||
msgid "Print ballot papers"
|
||||
msgstr "Stimmzettel drucken"
|
||||
|
||||
@ -1485,8 +1586,8 @@ msgstr "Empfehlung gesetzt auf {arg1}"
|
||||
msgid "Refer to committee"
|
||||
msgstr "In Ausschuss verweisen"
|
||||
|
||||
msgid "Reference projector"
|
||||
msgstr "Referenzprojektor"
|
||||
msgid "Reference projector for current list of speakers:"
|
||||
msgstr "Referezprojektor für die aktuelle Redeliste:"
|
||||
|
||||
msgid "Referral to committee"
|
||||
msgstr "Verweisung in Ausschuss"
|
||||
@ -1509,6 +1610,9 @@ msgstr "Verwerfung (nicht berechtigt)"
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
msgid "Remove all speakers"
|
||||
msgstr "Alle Redner/innen entfernen"
|
||||
|
||||
msgid ""
|
||||
"Remove all supporters of a motion if a submitter edits his motion in early "
|
||||
"state"
|
||||
@ -1568,6 +1672,18 @@ msgstr "QR-Code scannen um sich mit dem WLAN zu verbinden."
|
||||
msgid "Scan this QR code to open URL."
|
||||
msgstr "QR-Code scannen um die URL zu öffnen."
|
||||
|
||||
msgid "Scroll down"
|
||||
msgstr "Nach unten scrollen"
|
||||
|
||||
msgid "Scroll down (big step)"
|
||||
msgstr "Nach unten scrollen (in großen Schritten)"
|
||||
|
||||
msgid "Scroll up"
|
||||
msgstr "Nach oben scrollen"
|
||||
|
||||
msgid "Scroll up (big step)"
|
||||
msgstr "Nach oben scrollen (in großen Schritten)"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Suche"
|
||||
|
||||
@ -1610,6 +1726,9 @@ msgstr "Laufende Nummer"
|
||||
msgid "Serially numbered"
|
||||
msgstr "fortlaufend nummerieren"
|
||||
|
||||
msgid "Set active status for selected participants:"
|
||||
msgstr "Aktiv-Status für ausgewählte Teilnehmende setzen:"
|
||||
|
||||
msgid "Set as parent"
|
||||
msgstr "Als Eltern setzen"
|
||||
|
||||
@ -1619,6 +1738,9 @@ msgstr "Sachgebiet setzen"
|
||||
msgid "Set committee ..."
|
||||
msgstr "Gremium setzen ..."
|
||||
|
||||
msgid "Set committee status for selected participants:"
|
||||
msgstr "Gremium-Status für ausgewählte Teilnehmende setzen:"
|
||||
|
||||
msgid "Set hidden"
|
||||
msgstr "Versteckt setzen"
|
||||
|
||||
@ -1637,6 +1759,9 @@ msgstr "Antragsblock setzen"
|
||||
msgid "Set presence ..."
|
||||
msgstr "Anwesenheit setzen ..."
|
||||
|
||||
msgid "Set presence status for selected participants:"
|
||||
msgstr "Anwesenheits-Status für ausgewählte Teilnehmende setzen:"
|
||||
|
||||
msgid "Set public"
|
||||
msgstr "Öffentlich setzen"
|
||||
|
||||
@ -1727,6 +1852,9 @@ msgstr "Anträge sortieren"
|
||||
msgid "Sort name of participants by"
|
||||
msgstr "Namen der Teilnehmenden sortieren nach"
|
||||
|
||||
msgid "Speakers"
|
||||
msgstr "Redner/innen"
|
||||
|
||||
msgid "Special values"
|
||||
msgstr "Spezielle Werte"
|
||||
|
||||
@ -1901,6 +2029,12 @@ msgstr ""
|
||||
"Dieses Präfix wird gesetzt, wenn die automatische Nummerierung der "
|
||||
"Tagesordnung durchgeführt wird."
|
||||
|
||||
msgid ""
|
||||
"This will add or remove the following groups for all selected participants:"
|
||||
msgstr ""
|
||||
"Folgende Gruppen werden für die ausgewählten Teilnehmenden hinzugefügt oder "
|
||||
"entfernt:"
|
||||
|
||||
msgid ""
|
||||
"This will add or remove the following submitters for all selected motions:"
|
||||
msgstr ""
|
||||
@ -1912,9 +2046,6 @@ msgstr ""
|
||||
"Folgende Schlagwörter werden für die ausgewählten Anträge hinzugefügt oder "
|
||||
"entfernt:"
|
||||
|
||||
msgid "This will delete all selected motions."
|
||||
msgstr "Alle ausgewählten Anträge werden gelöscht."
|
||||
|
||||
msgid "This will move all selected motions as childs to:"
|
||||
msgstr ""
|
||||
"Alle ausgewählten Anträge werden unterhalb des folgenden "
|
||||
@ -1980,6 +2111,9 @@ msgstr "Themen wurden importiert."
|
||||
msgid "Topics(s) will be imported."
|
||||
msgstr "Themen werden importiert."
|
||||
|
||||
msgid "Total votes cast"
|
||||
msgstr "Abgegebene Stimmen"
|
||||
|
||||
msgid "Two-thirds majority"
|
||||
msgstr "Zweidrittelmehrheit"
|
||||
|
||||
@ -2028,6 +2162,9 @@ msgstr "Benutzername"
|
||||
msgid "Username or password is not correct."
|
||||
msgstr "Benutzername oder Passwort war nicht korrekt."
|
||||
|
||||
msgid "Valid votes"
|
||||
msgstr "Gültige Stimmen"
|
||||
|
||||
msgid "Visibility"
|
||||
msgstr "Sichtbarkeit"
|
||||
|
||||
@ -2079,6 +2216,9 @@ msgstr "Web-Interface-Kopfzeilen-Logo"
|
||||
msgid "Welcome to OpenSlides"
|
||||
msgstr "Willkommen bei OpenSlides"
|
||||
|
||||
msgid "Which version?"
|
||||
msgstr "Welche Fassung?"
|
||||
|
||||
msgid ""
|
||||
"Will be displayed as label before selected recommendation for statute "
|
||||
"amendments. Use an empty value to disable the recommendation system."
|
||||
@ -2153,12 +2293,21 @@ msgstr "[Platz für Ihren Begrüßungs- und Hilfetext.]"
|
||||
msgid "[Space for your welcome text.]"
|
||||
msgstr "[Platz für Ihren Begrüßungstext.]"
|
||||
|
||||
msgid "absent"
|
||||
msgstr "abwesend"
|
||||
|
||||
msgid "accepted"
|
||||
msgstr "angenommen"
|
||||
|
||||
msgid "active"
|
||||
msgstr "aktiv"
|
||||
|
||||
msgid "active users"
|
||||
msgstr "aktive Nutzer"
|
||||
|
||||
msgid "add group(s)"
|
||||
msgstr "Gruppe(n) hinzufügen"
|
||||
|
||||
msgid "adjourned"
|
||||
msgstr "vertagt"
|
||||
|
||||
@ -2171,6 +2320,9 @@ msgstr "stimmzettel"
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
msgid "committee"
|
||||
msgstr "Gremium"
|
||||
|
||||
msgid "connections"
|
||||
msgstr "Verbindungen"
|
||||
|
||||
@ -2180,6 +2332,12 @@ msgstr "Wortmeldung"
|
||||
msgid "disabled"
|
||||
msgstr "deaktiviert"
|
||||
|
||||
msgid "diverse"
|
||||
msgstr "divers"
|
||||
|
||||
msgid "emails"
|
||||
msgstr "E-Mails"
|
||||
|
||||
msgid "entries will be ommitted."
|
||||
msgstr "Einträge werden ausgelassen. "
|
||||
|
||||
@ -2189,6 +2347,15 @@ msgstr "Fehler"
|
||||
msgid "example"
|
||||
msgstr "Beispiel"
|
||||
|
||||
msgid "female"
|
||||
msgstr "weiblich"
|
||||
|
||||
msgid "has saved his work on this motion."
|
||||
msgstr "hat die Arbeit an diesem Antrag gespeichert."
|
||||
|
||||
msgid "inactive"
|
||||
msgstr "inaktiv"
|
||||
|
||||
msgid "inline"
|
||||
msgstr "innerhalb"
|
||||
|
||||
@ -2207,18 +2374,24 @@ msgstr "Einträge pro Seite"
|
||||
msgid "majority"
|
||||
msgstr "Mehrheit"
|
||||
|
||||
msgid "male"
|
||||
msgstr "männlich"
|
||||
|
||||
msgid "minutes"
|
||||
msgstr "Minuten"
|
||||
|
||||
msgid "motions"
|
||||
msgstr "Anträge"
|
||||
|
||||
msgid "motions-example"
|
||||
msgstr "Anträge-Beispiel"
|
||||
|
||||
msgid "needed"
|
||||
msgstr "erforderlich"
|
||||
|
||||
msgid "needs review"
|
||||
msgstr "benötigt Überprüfung"
|
||||
|
||||
msgid "no committee"
|
||||
msgstr "kein Gremium"
|
||||
|
||||
msgid "none"
|
||||
msgstr "aus"
|
||||
|
||||
@ -2228,9 +2401,6 @@ msgstr "nicht befasst"
|
||||
msgid "not decided"
|
||||
msgstr "nicht entschieden"
|
||||
|
||||
msgid "not present"
|
||||
msgstr "abwesend"
|
||||
|
||||
msgid "not reached."
|
||||
msgstr "nicht erreicht."
|
||||
|
||||
@ -2246,6 +2416,9 @@ msgstr "Teilnehmende-Beispiel"
|
||||
msgid "permitted"
|
||||
msgstr "zugelassen"
|
||||
|
||||
msgid "present"
|
||||
msgstr "anwesend"
|
||||
|
||||
msgid "published"
|
||||
msgstr "veröffentlicht"
|
||||
|
||||
@ -2261,6 +2434,9 @@ msgstr "abgelehnt"
|
||||
msgid "rejected (not authorized)"
|
||||
msgstr "verworfen (nicht zulässig)"
|
||||
|
||||
msgid "remove group(s)"
|
||||
msgstr "Gruppe(n) entfernen"
|
||||
|
||||
msgid "result"
|
||||
msgstr "Ergebnis"
|
||||
|
||||
@ -2270,9 +2446,6 @@ msgstr "Ergebnisse"
|
||||
msgid "selected"
|
||||
msgstr "ausgewählt"
|
||||
|
||||
msgid "self"
|
||||
msgstr "sich selbst"
|
||||
|
||||
msgid "statute paragraphs have been imported."
|
||||
msgstr "Satzungsabschnitte wurden importiert."
|
||||
|
||||
|
@ -114,9 +114,6 @@ msgstr ""
|
||||
msgid "All casted ballots"
|
||||
msgstr ""
|
||||
|
||||
msgid "All selected files will be deleted!"
|
||||
msgstr ""
|
||||
|
||||
msgid "All valid ballots"
|
||||
msgstr ""
|
||||
|
||||
@ -168,12 +165,84 @@ msgstr ""
|
||||
msgid "Arabic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to copy the final version to the print template?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete all selected elections?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete all selected files?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete all selected items?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete all selected motions?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete all selected participants?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete all speakers from this list of speakers?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete the print template?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete the selected message?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this category?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this change recommendation?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this comment field?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this countdown?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this entry?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this file?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this group?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this motion?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this participant?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this projector?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this statute paragraph?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this tag?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this vote?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to delete this workflow?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to number all agenda items?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to renumber all motions of this category?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure you want to send emails to all selected participants?"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"At least given name or surname have to be filled in. All other fields are "
|
||||
"optional and may be empty."
|
||||
@ -374,6 +443,9 @@ msgstr ""
|
||||
msgid "Clear list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear motion block"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear tags"
|
||||
msgstr ""
|
||||
|
||||
@ -383,6 +455,9 @@ msgstr ""
|
||||
msgid "Close list of speakers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Closed items"
|
||||
msgstr ""
|
||||
|
||||
msgid "Collapse all"
|
||||
msgstr ""
|
||||
|
||||
@ -437,6 +512,9 @@ msgstr ""
|
||||
msgid "Create new category"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create new state"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create new workflow"
|
||||
msgstr ""
|
||||
|
||||
@ -449,9 +527,6 @@ msgstr ""
|
||||
msgid "Current list of speakers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Current list of speakers reference"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom number of ballot papers"
|
||||
msgstr ""
|
||||
|
||||
@ -549,9 +624,6 @@ msgstr ""
|
||||
msgid "Do not decide"
|
||||
msgstr ""
|
||||
|
||||
msgid "Do you want to delete this file?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Does not have notes"
|
||||
msgstr ""
|
||||
|
||||
@ -658,6 +730,12 @@ msgstr ""
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error: The new passwords do not match."
|
||||
msgstr ""
|
||||
|
||||
msgid "Estimated end"
|
||||
msgstr ""
|
||||
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
|
||||
@ -742,6 +820,9 @@ msgstr ""
|
||||
msgid "Follow recommendations for all motions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Following users are currently editing this motion:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Forgot Password?"
|
||||
msgstr ""
|
||||
|
||||
@ -784,6 +865,9 @@ msgstr ""
|
||||
msgid "Groups with write permissions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Guest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Has notes"
|
||||
msgstr ""
|
||||
|
||||
@ -888,6 +972,9 @@ msgstr ""
|
||||
msgid "Invalid line number"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid votes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Is PDF file"
|
||||
msgstr ""
|
||||
|
||||
@ -918,6 +1005,9 @@ msgstr ""
|
||||
msgid "Is not favorite"
|
||||
msgstr ""
|
||||
|
||||
msgid "Is not present"
|
||||
msgstr ""
|
||||
|
||||
msgid "Is present"
|
||||
msgstr ""
|
||||
|
||||
@ -933,6 +1023,9 @@ msgstr ""
|
||||
msgid "Label color"
|
||||
msgstr ""
|
||||
|
||||
msgid "Last email send"
|
||||
msgstr ""
|
||||
|
||||
msgid "Last modified"
|
||||
msgstr ""
|
||||
|
||||
@ -978,9 +1071,6 @@ msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage the list of speakers for..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark speaker"
|
||||
msgstr ""
|
||||
|
||||
@ -1233,6 +1323,9 @@ msgstr ""
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open items"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open list of speakers"
|
||||
msgstr ""
|
||||
|
||||
@ -1281,7 +1374,7 @@ msgstr ""
|
||||
msgid "Parallel upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Parent item"
|
||||
msgid "Parent agenda item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Participant cannot be found"
|
||||
@ -1374,6 +1467,9 @@ msgstr ""
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous slides"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print ballot papers"
|
||||
msgstr ""
|
||||
|
||||
@ -1437,7 +1533,7 @@ msgstr ""
|
||||
msgid "Refer to committee"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reference projector"
|
||||
msgid "Reference projector for current list of speakers:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Referral to committee"
|
||||
@ -1461,6 +1557,9 @@ msgstr ""
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove all speakers"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Remove all supporters of a motion if a submitter edits his motion in early "
|
||||
"state"
|
||||
@ -1516,6 +1615,18 @@ msgstr ""
|
||||
msgid "Scan this QR code to open URL."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scroll down"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scroll down (big step)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scroll up"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scroll up (big step)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@ -1558,6 +1669,9 @@ msgstr ""
|
||||
msgid "Serially numbered"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set active status for selected participants:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set as parent"
|
||||
msgstr ""
|
||||
|
||||
@ -1567,6 +1681,9 @@ msgstr ""
|
||||
msgid "Set committee ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set committee status for selected participants:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set hidden"
|
||||
msgstr ""
|
||||
|
||||
@ -1585,6 +1702,9 @@ msgstr ""
|
||||
msgid "Set presence ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set presence status for selected participants:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set public"
|
||||
msgstr ""
|
||||
|
||||
@ -1675,6 +1795,9 @@ msgstr ""
|
||||
msgid "Sort name of participants by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Speakers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Special values"
|
||||
msgstr ""
|
||||
|
||||
@ -1833,15 +1956,15 @@ msgstr ""
|
||||
msgid "This prefix will be set if you run the automatic agenda numbering."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will add or remove the following groups for all selected participants:"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will add or remove the following submitters for all selected motions:"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will add or remove the following tags for all selected motions:"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will delete all selected motions."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will move all selected motions as childs to:"
|
||||
msgstr ""
|
||||
|
||||
@ -1901,6 +2024,9 @@ msgstr ""
|
||||
msgid "Topics(s) will be imported."
|
||||
msgstr ""
|
||||
|
||||
msgid "Total votes cast"
|
||||
msgstr ""
|
||||
|
||||
msgid "Two-thirds majority"
|
||||
msgstr ""
|
||||
|
||||
@ -1944,6 +2070,9 @@ msgstr ""
|
||||
msgid "Username or password is not correct."
|
||||
msgstr ""
|
||||
|
||||
msgid "Valid votes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
|
||||
@ -1995,6 +2124,9 @@ msgstr ""
|
||||
msgid "Welcome to OpenSlides"
|
||||
msgstr ""
|
||||
|
||||
msgid "Which version?"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Will be displayed as label before selected recommendation for statute "
|
||||
"amendments. Use an empty value to disable the recommendation system."
|
||||
@ -2062,12 +2194,21 @@ msgstr ""
|
||||
msgid "[Space for your welcome text.]"
|
||||
msgstr ""
|
||||
|
||||
msgid "absent"
|
||||
msgstr ""
|
||||
|
||||
msgid "accepted"
|
||||
msgstr ""
|
||||
|
||||
msgid "active"
|
||||
msgstr ""
|
||||
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
|
||||
msgid "add group(s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "adjourned"
|
||||
msgstr ""
|
||||
|
||||
@ -2080,6 +2221,9 @@ msgstr ""
|
||||
msgid "by"
|
||||
msgstr ""
|
||||
|
||||
msgid "committee"
|
||||
msgstr ""
|
||||
|
||||
msgid "connections"
|
||||
msgstr ""
|
||||
|
||||
@ -2089,6 +2233,12 @@ msgstr ""
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
msgid "diverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "emails"
|
||||
msgstr ""
|
||||
|
||||
msgid "entries will be ommitted."
|
||||
msgstr ""
|
||||
|
||||
@ -2098,6 +2248,15 @@ msgstr ""
|
||||
msgid "example"
|
||||
msgstr ""
|
||||
|
||||
msgid "female"
|
||||
msgstr ""
|
||||
|
||||
msgid "has saved his work on this motion."
|
||||
msgstr ""
|
||||
|
||||
msgid "inactive"
|
||||
msgstr ""
|
||||
|
||||
msgid "inline"
|
||||
msgstr ""
|
||||
|
||||
@ -2116,16 +2275,22 @@ msgstr ""
|
||||
msgid "majority"
|
||||
msgstr ""
|
||||
|
||||
msgid "male"
|
||||
msgstr ""
|
||||
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
msgid "motions"
|
||||
msgstr ""
|
||||
|
||||
msgid "motions-example"
|
||||
msgstr ""
|
||||
|
||||
msgid "needed"
|
||||
msgid "needs review"
|
||||
msgstr ""
|
||||
|
||||
msgid "needs review"
|
||||
msgid "no committee"
|
||||
msgstr ""
|
||||
|
||||
msgid "none"
|
||||
@ -2137,9 +2302,6 @@ msgstr ""
|
||||
msgid "not decided"
|
||||
msgstr ""
|
||||
|
||||
msgid "not present"
|
||||
msgstr ""
|
||||
|
||||
msgid "not reached."
|
||||
msgstr ""
|
||||
|
||||
@ -2155,6 +2317,9 @@ msgstr ""
|
||||
msgid "permitted"
|
||||
msgstr ""
|
||||
|
||||
msgid "present"
|
||||
msgstr ""
|
||||
|
||||
msgid "published"
|
||||
msgstr ""
|
||||
|
||||
@ -2170,6 +2335,9 @@ msgstr ""
|
||||
msgid "rejected (not authorized)"
|
||||
msgstr ""
|
||||
|
||||
msgid "remove group(s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "result"
|
||||
msgstr ""
|
||||
|
||||
@ -2179,9 +2347,6 @@ msgstr ""
|
||||
msgid "selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "self"
|
||||
msgstr ""
|
||||
|
||||
msgid "statute paragraphs have been imported."
|
||||
msgstr ""
|
||||
|
||||
|
@ -52,7 +52,7 @@
|
||||
* {
|
||||
font-family: OSFont, Fira Sans, Roboto, Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.mat-toolbar h2 {
|
||||
.mat-toolbar h2, .mat-dialog-title {
|
||||
font-family: OSFont, Fira Sans, Roboto, Arial, Helvetica, sans-serif !important;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user