mirror of
https://github.com/bpatrik/pigallery2.git
synced 2025-01-12 04:23:09 +02:00
implementing basic Internationalization
This commit is contained in:
parent
9d84c410cd
commit
3124b3be64
18
backend/model/Localizations.ts
Normal file
18
backend/model/Localizations.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import {ProjectPath} from "../ProjectPath";
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
import {Config} from "../../common/config/private/Config";
|
||||
|
||||
export class Localizations {
|
||||
|
||||
constructor() {
|
||||
}
|
||||
|
||||
public static init() {
|
||||
const notLanguage = ['assets'];
|
||||
const dirCont = fs.readdirSync(ProjectPath.FrontendFolder).filter(f => fs.statSync(path.resolve(ProjectPath.FrontendFolder, f)).isDirectory());
|
||||
Config.Client.languages = dirCont.filter(d => notLanguage.indexOf(d) == -1);
|
||||
Config.Client.languages.push("en");
|
||||
}
|
||||
|
||||
}
|
@ -1,16 +1,46 @@
|
||||
import * as _express from "express";
|
||||
import {NextFunction, Request, Response} from "express";
|
||||
import * as _path from "path";
|
||||
import * as path from "path";
|
||||
import * as fs from "fs";
|
||||
import {Utils} from "../../common/Utils";
|
||||
import {Config} from "../../common/config/private/Config";
|
||||
import {ProjectPath} from "../ProjectPath";
|
||||
import {AuthenticationMWs} from "../middlewares/user/AuthenticationMWs";
|
||||
import {CookieNames} from "../../common/CookieNames";
|
||||
|
||||
|
||||
export class PublicRouter {
|
||||
|
||||
public static route(app) {
|
||||
const setLocale = (req: Request, res: Response, next: Function) => {
|
||||
let localePath = "";
|
||||
let selectedLocale = req['locale'];
|
||||
if (req.cookies && req.cookies[CookieNames.lang]) {
|
||||
if (Config.Client.languages.indexOf(req.cookies[CookieNames.lang]) !== -1) {
|
||||
console.log(selectedLocale);
|
||||
selectedLocale = req.cookies[CookieNames.lang];
|
||||
}
|
||||
}
|
||||
if (selectedLocale !== 'en') {
|
||||
localePath = req['locale'];
|
||||
}
|
||||
res.cookie(CookieNames.lang, selectedLocale);
|
||||
req['localePath'] = localePath;
|
||||
next();
|
||||
};
|
||||
|
||||
const renderIndex = (req: Request, res: Response) => {
|
||||
res.sendFile(_path.resolve(ProjectPath.FrontendFolder, 'index.html'), {maxAge: 31536000});
|
||||
res.sendFile(path.resolve(ProjectPath.FrontendFolder, req['localePath'], 'index.html'), {maxAge: 31536000});
|
||||
};
|
||||
|
||||
|
||||
const redirectToBase = (locale: string) => {
|
||||
return (req: Request, res: Response) => {
|
||||
console.log(locale);
|
||||
if (Config.Client.languages.indexOf(locale) !== -1) {
|
||||
res.cookie(CookieNames.lang, locale);
|
||||
}
|
||||
res.redirect("/");
|
||||
};
|
||||
};
|
||||
|
||||
app.use(
|
||||
@ -29,16 +59,42 @@ export class PublicRouter {
|
||||
});
|
||||
|
||||
app.get('/config_inject.js', (req: Request, res: Response) => {
|
||||
res.render(_path.resolve(ProjectPath.FrontendFolder, 'config_inject.ejs'), res.tpl);
|
||||
res.render(path.resolve(ProjectPath.FrontendFolder, 'config_inject.ejs'), res.tpl);
|
||||
});
|
||||
|
||||
app.get(['/', '/login', "/gallery*", "/share*", "/admin", "/search*"],
|
||||
AuthenticationMWs.tryAuthenticate,
|
||||
setLocale,
|
||||
renderIndex
|
||||
);
|
||||
Config.Client.languages.forEach(l => {
|
||||
app.get(['/' + l + '/', '/' + l + '/login', '/' + l + "/gallery*", '/' + l + "/share*", '/' + l + "/admin", '/' + l + "/search*"],
|
||||
redirectToBase(l)
|
||||
);
|
||||
});
|
||||
|
||||
app.use(_express.static(ProjectPath.FrontendFolder, {maxAge: 31536000}));
|
||||
// app.use('/node_modules', _express.static(_path.resolve(__dirname, './../../node_modules')));
|
||||
// app.use('/common', _express.static(_path.resolve(__dirname, './../../common')));
|
||||
app.get('/assets/:file',
|
||||
setLocale,
|
||||
(req: Request, res: Response) => {
|
||||
const file = path.resolve(ProjectPath.FrontendFolder, req['localePath'], 'assets', req.params.file);
|
||||
fs.exists(file, (exists: boolean) => {
|
||||
if (!exists) {
|
||||
return res.sendStatus(404);
|
||||
}
|
||||
res.sendFile(file);
|
||||
});
|
||||
});
|
||||
app.get('/:file',
|
||||
setLocale,
|
||||
(req: Request, res: Response) => {
|
||||
const file = path.resolve(ProjectPath.FrontendFolder, req['localePath'], req.params.file);
|
||||
fs.exists(file, (exists: boolean) => {
|
||||
if (!exists) {
|
||||
return res.sendStatus(404);
|
||||
}
|
||||
res.sendFile(file);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
import * as _express from "express";
|
||||
import * as _bodyParser from "body-parser";
|
||||
import * as cookieParser from "cookie-parser";
|
||||
import * as _http from "http";
|
||||
import * as locale from "locale";
|
||||
import {PublicRouter} from "./routes/PublicRouter";
|
||||
import {UserRouter} from "./routes/UserRouter";
|
||||
import {GalleryRouter} from "./routes/GalleryRouter";
|
||||
@ -16,6 +18,8 @@ import {ThumbnailGeneratorMWs} from "./middlewares/thumbnail/ThumbnailGeneratorM
|
||||
import {DiskManager} from "./model/DiskManger";
|
||||
import {NotificationRouter} from "./routes/NotificationRouter";
|
||||
import {ConfigDiagnostics} from "./model/ConfigDiagnostics";
|
||||
import {Localizations} from "./model/Localizations";
|
||||
import {CookieNames} from "../common/CookieNames";
|
||||
|
||||
const _session = require('cookie-session');
|
||||
|
||||
@ -56,7 +60,7 @@ export class Server {
|
||||
}
|
||||
|
||||
this.app.use(_session({
|
||||
name: "pigallery2-session",
|
||||
name: CookieNames.session,
|
||||
keys: ["key1" + s4() + s4() + s4() + s4(), "key2" + s4() + s4() + s4() + s4(), "key3" + s4() + s4() + s4() + s4()]
|
||||
}));
|
||||
|
||||
@ -71,9 +75,13 @@ export class Server {
|
||||
*/
|
||||
// for parsing application/json
|
||||
this.app.use(_bodyParser.json());
|
||||
this.app.use(cookieParser());
|
||||
|
||||
DiskManager.init();
|
||||
ThumbnailGeneratorMWs.init();
|
||||
Localizations.init();
|
||||
|
||||
this.app.use(locale(Config.Client.languages, "en"));
|
||||
if (Config.Server.database.type != DatabaseType.memory) {
|
||||
await ObjectManagerRepository.InitSQLManagers();
|
||||
} else {
|
||||
|
4
common/CookieNames.ts
Normal file
4
common/CookieNames.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export class CookieNames {
|
||||
public static lang = "pigallery2-lang";
|
||||
public static session = "pigallery2-session";
|
||||
}
|
@ -36,6 +36,7 @@ export module ClientConfig {
|
||||
enableOnScrollThumbnailPrioritising: boolean;
|
||||
authenticationRequired: boolean;
|
||||
publicUrl: string;
|
||||
languages: string[];
|
||||
}
|
||||
|
||||
}
|
||||
@ -73,7 +74,8 @@ export class PublicConfigClass {
|
||||
enableOnScrollRendering: true,
|
||||
enableOnScrollThumbnailPrioritising: true,
|
||||
authenticationRequired: true,
|
||||
publicUrl: ""
|
||||
publicUrl: "",
|
||||
languages: []
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
<div class="panel panel-default" *ngIf="notificationService.notifications.length>0">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Server notifications</h3>
|
||||
<h3 class="panel-title" i18n>Server notifications</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<ng-container *ngFor="let notification of notificationService.notifications">
|
||||
@ -16,14 +16,14 @@
|
||||
</ng-container>
|
||||
</div>
|
||||
|
||||
<div class="panel-footer">
|
||||
<div class="panel-footer" i18n>
|
||||
To dismiss these notifications, restart the server.
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-10 control-label" for="simplifiedMode">Mode</label>
|
||||
<div class="col-sm-2">
|
||||
<label class="col-sm-10 col-xs-8 control-label" for="simplifiedMode" i18n>Mode</label>
|
||||
<div class="col-sm-2 col-xs-4">
|
||||
<bSwitch
|
||||
id="simplifiedMode"
|
||||
class="switch"
|
||||
|
@ -47,6 +47,7 @@ import {NavigationService} from "./model/navigation.service";
|
||||
import {InfoPanelLightboxComponent} from "./gallery/lightbox/infopanel/info-panel.lightbox.gallery.component";
|
||||
import {MapSettingsComponent} from "./settings/map/map.settings.component";
|
||||
import {TooltipModule} from "ngx-bootstrap/tooltip";
|
||||
import {BsDropdownModule} from "ngx-bootstrap/dropdown";
|
||||
import {ThumbnailSettingsComponent} from "./settings/thumbnail/thumbanil.settings.component";
|
||||
import {SearchSettingsComponent} from "./settings/search/search.settings.component";
|
||||
import {SettingsService} from "./settings/settings.service";
|
||||
@ -55,6 +56,7 @@ import {BasicSettingsComponent} from "./settings/basic/basic.settings.component"
|
||||
import {OtherSettingsComponent} from "./settings/other/other.settings.component";
|
||||
import {DefaultUrlSerializer, UrlSerializer, UrlTree} from '@angular/router';
|
||||
import {IndexingSettingsComponent} from "./settings/indexing/indexing.settings.component";
|
||||
import {LanguageComponent} from "./language/language.component";
|
||||
|
||||
@Injectable()
|
||||
export class GoogleMapsConfig {
|
||||
@ -98,6 +100,7 @@ export class CustomUrlSerializer implements UrlSerializer {
|
||||
TooltipModule.forRoot(),
|
||||
ToastModule.forRoot(),
|
||||
ModalModule.forRoot(),
|
||||
BsDropdownModule.forRoot(),
|
||||
AgmCoreModule.forRoot(),
|
||||
SlimLoadingBarModule.forRoot()
|
||||
],
|
||||
@ -105,7 +108,9 @@ export class CustomUrlSerializer implements UrlSerializer {
|
||||
LoginComponent,
|
||||
ShareLoginComponent,
|
||||
GalleryComponent,
|
||||
//misc
|
||||
FrameComponent,
|
||||
LanguageComponent,
|
||||
//Gallery
|
||||
GalleryLightboxPhotoComponent,
|
||||
GalleryPhotoLoadingComponent,
|
||||
|
@ -48,3 +48,8 @@ ng2-slim-loading-bar {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
language {
|
||||
display: block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
{{title}}</a>
|
||||
</div>
|
||||
<div id="navbar" class="collapse navbar-collapse" [ngClass]="{ 'in': isIn }">
|
||||
<ul class="nav navbar-nav">
|
||||
<ul class="nav navbar-nav">$
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
@ -35,10 +35,15 @@
|
||||
<span *ngIf="notificationService.notifications.length>0" class="badge">{{notificationService.notifications.length}}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<language class="navbar-btn"></language>
|
||||
</li>
|
||||
<li *ngIf="authenticationRequired">
|
||||
<button class="btn btn-default navbar-btn"
|
||||
style="cursor: pointer"
|
||||
(click)="logout()">Logout <span class="glyphicon glyphicon-log-out" aria-hidden="true"></span>
|
||||
(click)="logout()">
|
||||
<ng-container i18n>Logout</ng-container>
|
||||
<span class="glyphicon glyphicon-log-out" aria-hidden="true"></span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -4,7 +4,11 @@
|
||||
<ng-container navbar>
|
||||
|
||||
<li *ngIf="countDown">
|
||||
<p class="navbar-text">Link availability: {{countDown.day}} days,
|
||||
<p class="navbar-text">
|
||||
<ng-container i18n>Link availability</ng-container>
|
||||
: {{countDown.day}}
|
||||
<ng-container i18n>days</ng-container>
|
||||
,
|
||||
{{("0"+countDown.hour).slice(-2)}}:{{("0"+countDown.minute).slice(-2)}}:{{("0"+countDown.second).slice(-2)}}
|
||||
</p>
|
||||
</li>
|
||||
@ -32,12 +36,12 @@
|
||||
|
||||
<div body class="container" style="width: 100%; padding:0" *ngIf="_galleryService.content.value.searchResult">
|
||||
<div class="alert alert-info" role="alert"
|
||||
*ngIf="_galleryService.content.value.searchResult.resultOverflow == true">
|
||||
*ngIf="_galleryService.content.value.searchResult.resultOverflow == true" i18n>
|
||||
Too many results to show. Refine your search.
|
||||
</div>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active">
|
||||
Searching for:
|
||||
<ng-container i18n>Searching for:</ng-container>
|
||||
<span [ngSwitch]="_galleryService.content.value.searchResult.searchType">
|
||||
<span *ngSwitchCase="0" class="glyphicon glyphicon-picture"></span>
|
||||
<span *ngSwitchCase="1" class="glyphicon glyphicon-folder-open"></span>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" (click)="close()" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
<h1 class="modal-title">Info</h1>
|
||||
<h1 class="modal-title" i18n>Info</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-2">
|
||||
|
@ -50,7 +50,6 @@ export class GalleryNavigatorComponent implements OnChanges {
|
||||
arr.push({name: "Images", route: null});
|
||||
} else {
|
||||
arr.push({name: "Images", route: UserDTO.isPathAvailable("/", user.permissions) ? "/" : null});
|
||||
|
||||
}
|
||||
|
||||
//create rest navigation
|
||||
|
@ -2,6 +2,7 @@
|
||||
<div class="input-group">
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
i18n-placeholder
|
||||
placeholder="Search"
|
||||
(keyup)="onSearchChange($event)"
|
||||
(blur)="onFocusLost()"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<button id="shareButton" class="btn btn-default navbar-btn btn-link"
|
||||
type="button" [disabled]="!enabled" (click)="showModal()">
|
||||
<span class="glyphicon glyphicon-share-alt"></span>
|
||||
Share
|
||||
<ng-container i18n>Share</ng-container>
|
||||
</button>
|
||||
|
||||
<!-- sharing Modal-->
|
||||
@ -15,7 +15,7 @@
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" (click)="hideModal()" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="shareModalLabel">Share</h4>
|
||||
<h4 class="modal-title" id="shareModalLabel" i18n>Share</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
@ -31,14 +31,14 @@
|
||||
<button id="copyButton" name="copyButton"
|
||||
ngxClipboard [cbContent]="url"
|
||||
(cbOnSuccess)="onCopy()"
|
||||
class="btn btn-primary">Copy
|
||||
class="btn btn-primary" i18n>Copy
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<label class="control-label">Sharing:</label>
|
||||
<label class="control-label" i18n>Sharing:</label>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<input disabled type="text"
|
||||
@ -49,7 +49,7 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<label class="control-label">Include subfolders:</label>
|
||||
<label class="control-label" i18n>Include subfolders:</label>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<input id="recursiveShareBox"
|
||||
@ -63,7 +63,9 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<label class="control-label">Password:</label>
|
||||
<label class="control-label">
|
||||
<ng-container i18n>Password</ng-container>
|
||||
:</label>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<input id="password"
|
||||
@ -77,7 +79,7 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<label class="control-label">Valid:</label>
|
||||
<label class="control-label" i18n>Valid:</label>
|
||||
</div>
|
||||
<div class="col-sm-3" style="padding-right: 1px">
|
||||
<input class="form-control" [(ngModel)]="input.valid.amount" (change)="update()"
|
||||
|
3
frontend/app/language/language.component.css
Normal file
3
frontend/app/language/language.component.css
Normal file
@ -0,0 +1,3 @@
|
||||
.dropdown-menu {
|
||||
min-width: auto;
|
||||
}
|
21
frontend/app/language/language.component.html
Normal file
21
frontend/app/language/language.component.html
Normal file
@ -0,0 +1,21 @@
|
||||
<div class="dropdown" dropdown>
|
||||
<button dropdownToggle
|
||||
class="btn btn-default dropdown-toggle"
|
||||
type="button"
|
||||
id="language"
|
||||
data-toggle="dropdown"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="true">
|
||||
<ng-container *ngIf="current != null">
|
||||
{{current}}
|
||||
</ng-container>
|
||||
<span *ngIf="current == null" class="glyphicon glyphicon-globe">
|
||||
</span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul *dropdownMenu class="dropdown-menu" aria-labelledby="language">
|
||||
<li *ngFor="let lang of languages">
|
||||
<a href="/{{lang}}">{{lang}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
26
frontend/app/language/language.component.ts
Normal file
26
frontend/app/language/language.component.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import {Component} from "@angular/core";
|
||||
import {Config} from "../../../common/config/public/Config";
|
||||
import {Cookie} from "ng2-cookies";
|
||||
import {CookieNames} from "../../../common/CookieNames";
|
||||
|
||||
@Component({
|
||||
selector: 'language',
|
||||
templateUrl: './language.component.html',
|
||||
styleUrls: ['./language.component.css'],
|
||||
})
|
||||
export class LanguageComponent {
|
||||
|
||||
languages: string[] = [];
|
||||
current: string = null;
|
||||
|
||||
constructor() {
|
||||
this.languages = Config.Client.languages;
|
||||
if (Cookie.get(CookieNames.lang) != null) {
|
||||
this.current = Cookie.get(CookieNames.lang);
|
||||
}
|
||||
console.log(this.current);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -61,7 +61,7 @@
|
||||
color: #d9534f;
|
||||
}
|
||||
|
||||
button {
|
||||
.btn-login {
|
||||
width: 100%;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
@ -1,21 +1,24 @@
|
||||
<div class="container">
|
||||
|
||||
<div class="row">
|
||||
<language class="pull-right"></language>
|
||||
</div>
|
||||
<div class="row title">
|
||||
<h1><img src="assets/icon.png"/>{{title}}</h1>
|
||||
</div>
|
||||
|
||||
<div class="row card">
|
||||
<div class="col-md-12">
|
||||
<h1>Please log in</h1>
|
||||
<h1 i18n>Please log in</h1>
|
||||
<form name="form" id="form" class="form-horizontal" #LoginForm="ngForm" (submit)="onLogin()">
|
||||
<div class="error-message">
|
||||
{{loginError}}
|
||||
<div class="error-message" [hidden]="loginError==false" i18n>
|
||||
Wrong username or password
|
||||
</div>
|
||||
<div class="input-group has-margin">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
|
||||
<input id="username"
|
||||
type="text"
|
||||
class="form-control"
|
||||
i18n-placeholder
|
||||
placeholder="Username"
|
||||
autofocus
|
||||
[(ngModel)]="loginCredential.username"
|
||||
@ -29,21 +32,26 @@
|
||||
type="password"
|
||||
[(ngModel)]="loginCredential.password"
|
||||
name="password"
|
||||
i18n-placeholder
|
||||
placeholder="Password"
|
||||
required>
|
||||
</div>
|
||||
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" name="rememberMe" [(ngModel)]="loginCredential.rememberMe" value="">Remember me</label>
|
||||
<label><input type="checkbox" name="rememberMe" [(ngModel)]="loginCredential.rememberMe" value="">
|
||||
<ng-container i18n>Remember
|
||||
me
|
||||
</ng-container>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<!-- Button -->
|
||||
<div class="col-sm-12 controls">
|
||||
<button class="btn btn-primary pull-right"
|
||||
<button class="btn btn-primary pull-right btn-login"
|
||||
[disabled]="!LoginForm.form.valid || inProgress"
|
||||
type="submit"
|
||||
name="action">Login
|
||||
name="action" i18n>Login
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -12,7 +12,7 @@ import {NavigationService} from "../model/navigation.service";
|
||||
})
|
||||
export class LoginComponent implements OnInit {
|
||||
loginCredential: LoginCredential;
|
||||
loginError: any = null;
|
||||
loginError: boolean = false;
|
||||
title: string;
|
||||
inProgress = false;
|
||||
|
||||
@ -28,14 +28,14 @@ export class LoginComponent implements OnInit {
|
||||
}
|
||||
|
||||
async onLogin() {
|
||||
this.loginError = null;
|
||||
this.loginError = false;
|
||||
|
||||
this.inProgress = true;
|
||||
try {
|
||||
await this._authService.login(this.loginCredential);
|
||||
} catch (error) {
|
||||
if (error && error.code === ErrorCodes.CREDENTIAL_NOT_FOUND) {
|
||||
this.loginError = "Wrong username or password";
|
||||
this.loginError = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import {Cookie} from "ng2-cookies";
|
||||
import {Config} from "../../../../common/config/public/Config";
|
||||
import {NetworkService} from "./network.service";
|
||||
import {ErrorCodes, ErrorDTO} from "../../../../common/entities/Error";
|
||||
import {CookieNames} from "../../../../common/CookieNames";
|
||||
|
||||
declare module ServerInject {
|
||||
export let user: UserDTO;
|
||||
@ -22,7 +23,7 @@ export class AuthenticationService {
|
||||
this.user = new BehaviorSubject(null);
|
||||
|
||||
//picking up session..
|
||||
if (this.isAuthenticated() == false && Cookie.get('pigallery2-session') != null) {
|
||||
if (this.isAuthenticated() == false && Cookie.get(CookieNames.session) != null) {
|
||||
if (typeof ServerInject !== "undefined" && typeof ServerInject.user !== "undefined") {
|
||||
this.user.next(ServerInject.user);
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
<form #settingsForm="ngForm" class="form-horizontal">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Basic settings</h3>
|
||||
<h3 class="panel-title" i18n>Basic settings</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
|
||||
|
||||
|
||||
<div class="form-group" [hidden]="simplifiedMode">
|
||||
<label class="col-sm-2 control-label" for="applicationTitle">Page title</label>
|
||||
<label class="col-sm-2 control-label" for="applicationTitle" i18n>Page title</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" placeholder="Pigallery 2"
|
||||
id="applicationTitle"
|
||||
@ -26,7 +26,7 @@
|
||||
max="65535"
|
||||
[(ngModel)]="settings.port"
|
||||
name="port" required>
|
||||
<span class="help-block">Port number. Port 80 is usually what you need.</span>
|
||||
<span class="help-block" i18n>Port number. Port 80 is usually what you need.</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -37,27 +37,27 @@
|
||||
id="folder"
|
||||
[(ngModel)]="settings.imagesFolder"
|
||||
name="folder" required>
|
||||
<span class="help-block">Images are loaded from this folder (read permission required)</span>
|
||||
<span class="help-block" i18n>Images are loaded from this folder (read permission required)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" [hidden]="simplifiedMode">
|
||||
<label class="col-sm-2 control-label" for="publicUrl">Page public url</label>
|
||||
<label class="col-sm-2 control-label" for="publicUrl" i18n>Page public url</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="url" class="form-control" placeholder="{{urlPlaceholder}}"
|
||||
id="publicUrl"
|
||||
[(ngModel)]="settings.publicUrl"
|
||||
name="publicUrl">
|
||||
<span class="help-block">If you access the page form local network its good to know the public url for creating sharing link</span>
|
||||
<span class="help-block" i18n>If you access the page form local network its good to know the public url for creating sharing link</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,31 +1,31 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Database settings</h3>
|
||||
<h3 class="panel-title" i18n>Database settings</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
|
||||
<form #settingsForm="ngForm">
|
||||
<p class="title">Type:</p>
|
||||
<p class="title" i18n>Type:</p>
|
||||
<select class="form-control" [(ngModel)]="settings.type" name="type" required>
|
||||
<option *ngFor="let type of types" [ngValue]="type.key">{{type.value}}
|
||||
</option>
|
||||
</select>
|
||||
<span *ngIf="settings.type == DatabaseType.mysql"
|
||||
class="help-block">Install manually mysql node module to use mysql (npm install mysql)</span>
|
||||
class="help-block" i18n>Install manually mysql node module to use mysql (npm install mysql)</span>
|
||||
|
||||
<ng-container *ngIf="settings.type == DatabaseType.mysql">
|
||||
<p class="title">MySQL settings:</p>
|
||||
<input type="text" class="form-control" placeholder="Host" autofocus
|
||||
<p class="title" i18n>MySQL settings:</p>
|
||||
<input type="text" class="form-control" i18n-placeholder placeholder="Host" autofocus
|
||||
[(ngModel)]="settings.mysql.host" name="host" required>
|
||||
<input type="text" class="form-control" placeholder="Database" autofocus
|
||||
<input type="text" class="form-control" i18n-placeholder placeholder="Database" autofocus
|
||||
[(ngModel)]="settings.mysql.database" name="database" required>
|
||||
<input type="text" class="form-control" placeholder="Username"
|
||||
<input type="text" class="form-control" i18n-placeholder placeholder="Username"
|
||||
[(ngModel)]="settings.mysql.username" name="username">
|
||||
<input type="password" class="form-control" placeholder="Password"
|
||||
<input type="password" class="form-control" i18n-placeholder placeholder="Password"
|
||||
[(ngModel)]="settings.mysql.password" name="password">
|
||||
</ng-container>
|
||||
<ng-container *ngIf="settings.type == DatabaseType.sqlite">
|
||||
<p class="title">SQLie settings:</p>
|
||||
<p class="title" i18n>SQLie settings:</p>
|
||||
<input type="text" class="form-control" placeholder="storage" autofocus
|
||||
[(ngModel)]="settings.sqlite.storage" name="host" required>
|
||||
</ng-container>
|
||||
@ -33,10 +33,10 @@
|
||||
</form>
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<form #settingsForm="ngForm" class="form-horizontal">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title col-xs-4">Folder indexing</h3>
|
||||
<h3 class="panel-title col-xs-4" i18n>Folder indexing</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
|
||||
|
||||
<ng-container *ngIf="!simplifiedMode">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="cachedFolderTimeout">Index cache timeout [ms]</label>
|
||||
<label class="col-sm-2 control-label" for="cachedFolderTimeout" i18n>Index cache timeout [ms]</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="number" class="form-control" placeholder="36000"
|
||||
id="cachedFolderTimeout"
|
||||
@ -16,11 +16,11 @@
|
||||
step="1"
|
||||
[(ngModel)]="settings.cachedFolderTimeout"
|
||||
name="cachedFolderTimeout" required>
|
||||
<span class="help-block">If there was no indexing in this time, it reindexes. (skipped if indexen in DB and sensitivity is low)</span>
|
||||
<span class="help-block" i18n>If there was no indexing in this time, it reindexes. (skipped if indexen in DB and sensitivity is low)</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="folderPreviewSize">Sub folder preview size</label>
|
||||
<label class="col-sm-2 control-label" for="folderPreviewSize" i18n>Sub folder preview size</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="number" class="form-control" placeholder="1"
|
||||
id="folderPreviewSize"
|
||||
@ -28,12 +28,12 @@
|
||||
step="1"
|
||||
[(ngModel)]="settings.folderPreviewSize"
|
||||
name="folderPreviewSize" required>
|
||||
<span class="help-block">Reads this many photos from sub folders</span>
|
||||
<span class="help-block" i18n>Reads this many photos from sub folders</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="reIndexingSensitivity">Folder reindexing sensitivity</label>
|
||||
<label class="col-sm-2 control-label" for="reIndexingSensitivity" i18n>Folder reindexing sensitivity</label>
|
||||
<div class="col-sm-10">
|
||||
<select id="reIndexingSensitivity" class="form-control" [(ngModel)]="settings.reIndexingSensitivity"
|
||||
name="reIndexingSensitivity" required>
|
||||
@ -41,24 +41,30 @@
|
||||
</option>
|
||||
</select>
|
||||
<span
|
||||
class="help-block">Set the reindexing sensitivity. High value check the folders for change more often</span>
|
||||
class="help-block"
|
||||
i18n>Set the reindexing sensitivity. High value check the folders for change more often</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
<br/>
|
||||
<hr/>
|
||||
</ng-container>
|
||||
If you add a new folder to your gallery, the site indexes it automatically.
|
||||
If you would like to trigger indexing manually, click index button.<br/>
|
||||
(Note: search ony searched among the indexed directories)<br/>
|
||||
|
||||
<ng-container i18n>If you add a new folder to your gallery, the site indexes it automatically.</ng-container>
|
||||
<ng-container i18n>If you would like to trigger indexing manually, click index button.</ng-container>
|
||||
<br/>
|
||||
(
|
||||
<ng-container i18n>Note: search ony searched among the indexed directories</ng-container>
|
||||
)<br/>
|
||||
|
||||
|
||||
<div *ngIf="_settingsService.progress.value != null">
|
||||
indexing: {{_settingsService.progress.value.current}}
|
||||
@ -79,16 +85,16 @@
|
||||
<button class="btn btn-success"
|
||||
*ngIf="_settingsService.progress.value == null"
|
||||
[disabled]="inProgress"
|
||||
(click)="index()">Index
|
||||
(click)="index()" i18n>Index
|
||||
</button>
|
||||
<button class="btn btn-default"
|
||||
*ngIf="_settingsService.progress.value != null"
|
||||
[disabled]="inProgress"
|
||||
(click)="cancelIndexing()">Cancel
|
||||
(click)="cancelIndexing()" i18n>Cancel
|
||||
</button>
|
||||
<button class="btn btn-danger"
|
||||
[disabled]="inProgress"
|
||||
(click)="resetDatabase()">Reset Indexes
|
||||
(click)="resetDatabase()" i18n>Reset Indexes
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<form #settingsForm="ngForm" class="form-horizontal">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title col-xs-4">Map settings</h3>
|
||||
<h3 class="panel-title col-xs-4" i18n>Map settings</h3>
|
||||
<div class="switch-wrapper col-xs-8">
|
||||
<bSwitch
|
||||
class="switch"
|
||||
@ -22,14 +22,15 @@
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="googleApiKey">Google maps api key</label>
|
||||
<label class="col-sm-2 control-label" for="googleApiKey" i18n>Google maps api key</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" placeholder="Google api key"
|
||||
[(ngModel)]="settings.googleApiKey"
|
||||
[disabled]="!settings.enabled"
|
||||
name="googleApiKey" id="googleApiKey" required>
|
||||
<span class="help-block">To show the images on a map, <a
|
||||
href="https://developers.google.com/maps/documentation/javascript/get-api-key">google api key</a> is need</span>
|
||||
<span class="help-block"><ng-container i18n>To show the images on a map,</ng-container> <a
|
||||
href="https://developers.google.com/maps/documentation/javascript/get-api-key" i18n>google api key</a> <ng-container
|
||||
i18n>is need</ng-container></span>
|
||||
|
||||
|
||||
</div>
|
||||
@ -37,10 +38,10 @@
|
||||
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<form #settingsForm="ngForm" class="form-horizontal">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Other settings</h3>
|
||||
<h3 class="panel-title" i18n>Other settings</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
|
||||
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong i18n>Error: </strong>{{error}}</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="enableThreading">Threading</label>
|
||||
<label class="col-sm-2 control-label" for="enableThreading" i18n>Threading</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="enableThreading"
|
||||
@ -22,12 +22,12 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.enableThreading">
|
||||
</bSwitch>
|
||||
<span class="help-block">Runs directory scanning and thumbnail generation (only for Jimp) in a different thread</span>
|
||||
<span class="help-block" i18n>Runs directory scanning and thumbnail generation (only for Jimp) in a different thread</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="enableOnScrollThumbnailPrioritising">Scroll based thumbnail
|
||||
<label class="col-sm-2 control-label" for="enableOnScrollThumbnailPrioritising" i18n>Scroll based thumbnail
|
||||
generation</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
@ -42,12 +42,12 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.enableOnScrollThumbnailPrioritising">
|
||||
</bSwitch>
|
||||
<span class="help-block">Those thumbnails get higher priority that are visible on the screen</span>
|
||||
<span class="help-block" i18n>Those thumbnails get higher priority that are visible on the screen</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="enableOnScrollRendering">Lazy image rendering</label>
|
||||
<label class="col-sm-2 control-label" for="enableOnScrollRendering" i18n>Lazy image rendering</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="enableOnScrollRendering"
|
||||
@ -61,13 +61,13 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.enableOnScrollRendering">
|
||||
</bSwitch>
|
||||
<span class="help-block">Shows only the required amount of photos at once. Renders more if page bottom is reached</span>
|
||||
<span class="help-block" i18n>Shows only the required amount of photos at once. Renders more if page bottom is reached</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="enableCache">Cache</label>
|
||||
<label class="col-sm-2 control-label" for="enableCache" i18n>Cache</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="enableCache"
|
||||
@ -81,17 +81,17 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.enableCache">
|
||||
</bSwitch>
|
||||
<span class="help-block">Caches directory contents and search results for better performance</span>
|
||||
<span class="help-block" i18n>Caches directory contents and search results for better performance</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="panel panel-default"
|
||||
[ngClass]="settings.enabled && !_settingsService.isSupported()?'panel-warning':''">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title col-xs-6">Search settings</h3>
|
||||
<h3 class="panel-title col-xs-6" i18n>Search settings</h3>
|
||||
<div class="switch-wrapper col-xs-6">
|
||||
<bSwitch
|
||||
class="switch"
|
||||
@ -24,7 +24,7 @@
|
||||
<ng-container *ngIf="settings.enabled || _settingsService.isSupported()">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="autocompleteEnabled">Autocomplete</label>
|
||||
<label class="col-sm-2 control-label" for="autocompleteEnabled" i18n>Autocomplete</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="autocompleteEnabled"
|
||||
@ -39,13 +39,13 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.autocompleteEnabled">
|
||||
</bSwitch>
|
||||
<span class="help-block">Show hints while typing search query</span>
|
||||
<span class="help-block" i18n>Show hints while typing search query</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="instantSearchEnabled">Instant search</label>
|
||||
<label class="col-sm-2 control-label" for="instantSearchEnabled" i18n>Instant search</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="instantSearchEnabled"
|
||||
@ -60,20 +60,20 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.instantSearchEnabled">
|
||||
</bSwitch>
|
||||
<span class="help-block">Enables showing search results, while typing search query</span>
|
||||
<span class="help-block" i18n>Enables showing search results, while typing search query</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</ng-container>
|
||||
<div class="panel-info" *ngIf="(!settings.enabled && !_settingsService.isSupported())">
|
||||
<div class="panel-info" *ngIf="(!settings.enabled && !_settingsService.isSupported())" i18n>
|
||||
Search is not supported with these settings
|
||||
</div>
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,9 +1,7 @@
|
||||
import {Injectable} from "@angular/core";
|
||||
import {BehaviorSubject} from "rxjs/BehaviorSubject";
|
||||
import {
|
||||
DatabaseType,
|
||||
IPrivateConfig,
|
||||
ReIndexingSensitivity,
|
||||
DatabaseType, IPrivateConfig, ReIndexingSensitivity,
|
||||
ThumbnailProcessingLib
|
||||
} from "../../../common/config/private/IPrivateConfig";
|
||||
import {NetworkService} from "../model/network/network.service";
|
||||
@ -42,7 +40,8 @@ export class SettingsService {
|
||||
enableCache: true,
|
||||
enableOnScrollRendering: true,
|
||||
enableOnScrollThumbnailPrioritising: true,
|
||||
authenticationRequired: true
|
||||
authenticationRequired: true,
|
||||
languages: []
|
||||
},
|
||||
Server: {
|
||||
database: {
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="panel panel-default"
|
||||
[ngClass]="settings.enabled && !_settingsService.isSupported()?'panel-warning':''">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title col-xs-6">Share settings</h3>
|
||||
<h3 class="panel-title col-xs-6" i18n>Share settings</h3>
|
||||
<div class="switch-wrapper col-xs-6">
|
||||
<bSwitch
|
||||
class="switch"
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
<ng-container *ngIf="settings.enabled || _settingsService.isSupported()">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="passwordProtected">Password protected</label>
|
||||
<label class="col-sm-2 control-label" for="passwordProtected" i18n>Password protected</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="passwordProtected"
|
||||
@ -38,21 +38,21 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.passwordProtected">
|
||||
</bSwitch>
|
||||
<span class="help-block">Enables password protected sharing links</span>
|
||||
<span class="help-block" i18n>Enables password protected sharing links</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</ng-container>
|
||||
<div class="panel-info" *ngIf="(!settings.enabled && !_settingsService.isSupported())">
|
||||
<div class="panel-info" *ngIf="(!settings.enabled && !_settingsService.isSupported())" i18n>
|
||||
Sharing is not supported with these settings
|
||||
</div>
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,18 +1,19 @@
|
||||
<form #settingsForm="ngForm" class="form-horizontal">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Thumbnail settings</h3>
|
||||
<h3 class="panel-title" i18n>Thumbnail settings</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
|
||||
<div [hidden]="settings.server.processingLibrary!=ThumbnailProcessingLib.Jimp"
|
||||
class="alert alert-warning"
|
||||
role="alert">It is highly recommended to use hardware accelerated (sharp or gm) lib for thumbnail generation
|
||||
role="alert" i18n>It is highly recommended to use hardware accelerated (sharp or gm) lib for thumbnail
|
||||
generation
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="lib">Thumbnail generation library</label>
|
||||
<label class="col-sm-2 control-label" for="lib" i18n>Thumbnail generation library</label>
|
||||
<div class="col-sm-10">
|
||||
<select id="lib" class="form-control" [(ngModel)]="settings.server.processingLibrary"
|
||||
name="type" required>
|
||||
@ -20,27 +21,27 @@
|
||||
</option>
|
||||
</select>
|
||||
<span *ngIf="settings.server.processingLibrary==ThumbnailProcessingLib.sharp"
|
||||
class="help-block">Make sure that sharp node module is installed (npm install sharp)</span>
|
||||
class="help-block" i18n>Make sure that sharp node module is installed (npm install sharp).</span>
|
||||
<span *ngIf="settings.server.processingLibrary==ThumbnailProcessingLib.gm"
|
||||
class="help-block">Make sure that gm node module and <a
|
||||
href="http://www.graphicsmagick.org/">GraphicsMagick</a> are installed (npm install sharp)</span>
|
||||
class="help-block"><ng-container i18n>Make sure that gm node module and</ng-container> <a
|
||||
href="http://www.graphicsmagick.org/" i18n>GraphicsMagick</a> <ng-container i18n>are installed (npm install sharp).</ng-container></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="th_folder">Thumbnail folder</label>
|
||||
<label class="col-sm-2 control-label" for="th_folder" i18n>Thumbnail folder</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" placeholder="path"
|
||||
id="th_folder"
|
||||
[(ngModel)]="settings.server.folder"
|
||||
name="path" required>
|
||||
<span class="help-block">Thumbnails will be saved in this folder. Write access is required</span>
|
||||
<span class="help-block" i18n>Thumbnails will be saved in this folder. Write access is required</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" [hidden]="simplifiedMode">
|
||||
<label class="col-sm-2 control-label" for="quality">Thumbnail Quality</label>
|
||||
<label class="col-sm-2 control-label" for="quality" i18n>Thumbnail Quality</label>
|
||||
<div class="col-sm-10">
|
||||
<bSwitch
|
||||
id="quality"
|
||||
@ -54,7 +55,7 @@
|
||||
[switch-label-width]="'20'"
|
||||
[(ngModel)]="settings.server.qualityPriority">
|
||||
</bSwitch>
|
||||
<span class="help-block">High quality may be slow. Especially with Jimp.</span>
|
||||
<span class="help-block" i18n>High quality may be slow. Especially with Jimp.</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -69,22 +70,23 @@
|
||||
max="100"
|
||||
step="1"
|
||||
name="icon" required>
|
||||
<span class="help-block">Icon size (used on maps)</span>
|
||||
<span class="help-block" i18n>Icon size (used on maps)</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" [hidden]="simplifiedMode">
|
||||
<label class="col-sm-2 control-label" for="thumbnailSizes">Thumbnail sizes</label>
|
||||
<label class="col-sm-2 control-label" for="thumbnailSizes" i18n>Thumbnail sizes</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" placeholder="200; 400"
|
||||
id="thumbnailSizes"
|
||||
[(ngModel)]="ThumbnailSizes"
|
||||
name="thumbnailSizes" required>
|
||||
<span class="help-block">
|
||||
Size of the thumbnails.<br/>
|
||||
The best matching size will be generated. (More size gives better quality, but use storage to store and CPU to render.)<br/>
|
||||
';' separated integers. If size is 200, tha thumbnail will have 200^2 pixels.
|
||||
<ng-container i18n>Size of the thumbnails.</ng-container><br/>
|
||||
<ng-container i18n>The best matching size will be generated. (More size gives better quality, but use storage to store and CPU to render.)</ng-container><br/>
|
||||
<ng-container
|
||||
i18n>';' separated integers. If size is 200, tha thumbnail will have 200^2 pixels.</ng-container>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
@ -93,10 +95,10 @@
|
||||
|
||||
<button class="btn btn-success pull-right"
|
||||
[disabled]="!settingsForm.form.valid || !changed || inProgress"
|
||||
(click)="save()">Save
|
||||
(click)="save()" i18n>Save
|
||||
</button>
|
||||
<button class="btn btn-default pull-right"
|
||||
(click)="reset()">Reset
|
||||
(click)="reset()" i18n>Reset
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title col-xs-6">Password protection </h3>
|
||||
<h3 class="panel-title col-xs-6" i18n>Password protection </h3>
|
||||
<div class="switch-wrapper col-xs-6">
|
||||
<bSwitch
|
||||
class="switch"
|
||||
@ -24,8 +24,8 @@
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Role</th>
|
||||
<th i18n>Name</th>
|
||||
<th i18n>Role</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -52,11 +52,10 @@
|
||||
</table>
|
||||
|
||||
<button class="btn btn-primary pull-right"
|
||||
(click)="initNewUser()">+ Add
|
||||
user
|
||||
(click)="initNewUser()" i18n>+ Add user
|
||||
</button>
|
||||
</ng-container>
|
||||
<div class="panel-info" *ngIf="!enabled">
|
||||
<div class="panel-info" *ngIf="!enabled" i18n>
|
||||
To protect the site with password / have login enable this.
|
||||
</div>
|
||||
</div>
|
||||
@ -70,14 +69,14 @@
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" (click)="userModal.hide()" aria-label="Close"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="userModalLabel">Add new User</h4>
|
||||
<h4 class="modal-title" id="userModalLabel" i18n>Add new User</h4>
|
||||
</div>
|
||||
|
||||
<form #NewUserForm="ngForm">
|
||||
<div class="modal-body">
|
||||
<input type="text" class="form-control" placeholder="Username" autofocus
|
||||
<input type="text" class="form-control" i18n-placeholder placeholder="Username" autofocus
|
||||
[(ngModel)]="newUser.name" name="name" required>
|
||||
<input type="password" class="form-control" placeholder="Password"
|
||||
<input type="password" class="form-control" i18n-placeholder placeholder="Password"
|
||||
[(ngModel)]="newUser.password" name="password" required>
|
||||
<select class="form-control" [(ngModel)]="newUser.role" name="role" required>
|
||||
<option *ngFor="let repository of userRoles" [value]="repository.key">{{repository.value}}
|
||||
@ -85,10 +84,10 @@
|
||||
</select>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" (click)="userModal.hide()">Close</button>
|
||||
<button type="button" class="btn btn-default" (click)="userModal.hide()" i18n>Close</button>
|
||||
<button type="button" class="btn btn-primary" data-dismiss="modal"
|
||||
(click)="addNewUser()"
|
||||
[disabled]="!NewUserForm.form.valid">Add User
|
||||
[disabled]="!NewUserForm.form.valid" i18n>Add User
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -51,7 +51,7 @@
|
||||
color: #d9534f;
|
||||
}
|
||||
|
||||
button {
|
||||
.btn-login {
|
||||
width: 100%;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
<div class="container">
|
||||
|
||||
<div class="row">
|
||||
<language class="pull-right"></language>
|
||||
</div>
|
||||
<div class="row title">
|
||||
<h1><img src="assets/icon.png"/>{{title}}</h1>
|
||||
</div>
|
||||
@ -7,8 +10,8 @@
|
||||
<div class="row card">
|
||||
<div class="col-md-12">
|
||||
<form name="form" id="form" class="form-horizontal" #LoginForm="ngForm" (submit)="onLogin()">
|
||||
<div class="error-message">
|
||||
{{loginError}}
|
||||
<div class="error-message" [hidden]="loginError==false" i18n>
|
||||
Wrong password
|
||||
</div>
|
||||
|
||||
<div class="input-group has-margin">
|
||||
@ -18,6 +21,7 @@
|
||||
type="password"
|
||||
[(ngModel)]="password"
|
||||
name="password"
|
||||
i18n-placeholder
|
||||
placeholder="Password"
|
||||
required>
|
||||
</div>
|
||||
@ -26,10 +30,10 @@
|
||||
<div class="form-group">
|
||||
<!-- Button -->
|
||||
<div class="col-sm-12 controls">
|
||||
<button class="btn btn-primary pull-right"
|
||||
<button class="btn btn-primary pull-right btn-login"
|
||||
[disabled]="!LoginForm.form.valid"
|
||||
type="submit"
|
||||
name="action">Enter
|
||||
name="action" i18n>Enter
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -11,7 +11,7 @@ import {NavigationService} from "../model/navigation.service";
|
||||
})
|
||||
export class ShareLoginComponent implements OnInit {
|
||||
password: string;
|
||||
loginError: any = null;
|
||||
loginError: boolean = false;
|
||||
title: string;
|
||||
|
||||
constructor(private _authService: AuthenticationService, private _navigation: NavigationService) {
|
||||
@ -25,14 +25,14 @@ export class ShareLoginComponent implements OnInit {
|
||||
}
|
||||
|
||||
async onLogin() {
|
||||
this.loginError = null;
|
||||
this.loginError = false;
|
||||
|
||||
try {
|
||||
await this._authService.shareLogin(this.password);
|
||||
|
||||
} catch (error) {
|
||||
if (error && error.code === ErrorCodes.CREDENTIAL_NOT_FOUND) {
|
||||
this.loginError = "Wrong password";
|
||||
this.loginError = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
<link rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-switch/3.3.4/css/bootstrap3/bootstrap-switch.css">
|
||||
|
||||
<script type="text/javascript" src="config_inject.js"></script>
|
||||
<script type="text/javascript" src="/config_inject.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
|
939
frontend/locale/messages.hu.xlf
Normal file
939
frontend/locale/messages.hu.xlf
Normal file
@ -0,0 +1,939 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file source-language="en" datatype="plaintext" original="ng2.template">
|
||||
<body>
|
||||
<trans-unit id="380bac8029fe968edf74d1856635666bf8b55516" datatype="html">
|
||||
<source>Please log in</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/login/login.component.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
<target>Jelentkezz be</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="f5006bd06a75b0b5719b47cd81a516d1a923ef88" datatype="html">
|
||||
<source>
|
||||
Wrong username or password
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/login/login.component.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target>Hibás felhasználónév vagy jelszó</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">
|
||||
<source>Username</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/login/login.component.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
</context-group>
|
||||
<target>Felhasználónév</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">
|
||||
<source>Password</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/login/login.component.ts</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">24</context>
|
||||
</context-group>
|
||||
<target>Jelszó</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c67b8aed16c2f80bd4a8d5df636bb333feaa8c78" datatype="html">
|
||||
<source>Remember
|
||||
me</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/login/login.component.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<target>Jegyezzen meg</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c15f0f6076dd3f758adb69556fb1751f7a8139dc" datatype="html">
|
||||
<source>Login
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/login/login.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
</context-group>
|
||||
<target>Belépés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="64034510da88fc99130864f733500fcd62aedb01" datatype="html">
|
||||
<source>
|
||||
Wrong password
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<target>Hibás jelszó</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7bc15e0478a1384ea38903e2506f4ae3fe7dd6e1" datatype="html">
|
||||
<source>Enter
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<target>Belépés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e892ba15f2c6c17e83510e273b3e10fc32ea016" datatype="html">
|
||||
<source>Search</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/search/search.gallery.component.ts</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
<target>Keresés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="f3cda2936c4e70d5b920b2c243ec634222743ba1" datatype="html">
|
||||
<source>Link availability</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/gallery.component.ts</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<target>Link érvényes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fc34f2683c4cb526ed7095c5b1cdd66d672ba932" datatype="html">
|
||||
<source>days</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/gallery.component.ts</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<target>nap</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c17b163553f84f2f704031a1b343e7b89c5c5ee1" datatype="html">
|
||||
<source>
|
||||
Too many results to show. Refine your search.
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/gallery.component.ts</context>
|
||||
<context context-type="linenumber">35</context>
|
||||
</context-group>
|
||||
<target>Túl sok találat. Pontosítsd a keresést.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="24f166827601febff9ec90329582bc637781def8" datatype="html">
|
||||
<source>Searching for:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/gallery.component.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<target>Keresés:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html">
|
||||
<source>Logout</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/frame/frame.component.ts</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
<target>Kijelentkezés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0bd8b27f60a1f098a53e06328426d818e3508ff9" datatype="html">
|
||||
<source>Share</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
<target>Ossza meg</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="74f659dedc52d20e191c01d8edc94acbeb972721" datatype="html">
|
||||
<source>Copy
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<target>Másolás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="07867d2c08ad81d9f1cb27f083c5d32d0d1f3bd6" datatype="html">
|
||||
<source>Sharing:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<target>Megosztás:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="030e713e20f553f6c55b76d217e8b604da1ea7c2" datatype="html">
|
||||
<source>Include subfolders:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<target>Alkönyvtárakat is:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ac26f1ef0bc7eb42fdabd901d99cb23728abcd4f" datatype="html">
|
||||
<source>Valid:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
</context-group>
|
||||
<target>Érvényes:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="f0acecaa22df19767da6d9990458470b17da3d7a" datatype="html">
|
||||
<source>Server notifications</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/admin/admin.component.ts</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
<target>Szerver értesítések</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="483d20ced82942e869d34d4592675741a0dfe910" datatype="html">
|
||||
<source>
|
||||
To dismiss these notifications, restart the server.
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/admin/admin.component.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<target>Az ilyen értesítések elütetéséhez indítsd újra a az alkalmazást.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">
|
||||
<source>Mode</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/admin/admin.component.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<target>Mód</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html">
|
||||
<source>Info</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/gallery/lightbox/infopanel/info-panel.lightbox.gallery.component.ts</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
<target>Info</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="343879e5c41bab3cbc6160ae25fb0ed8e08859f0" datatype="html">
|
||||
<source>Password protection </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<target>Jelszavas védelem</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">
|
||||
<source>Name</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
<target>Név</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c36a66f2107e8da5371ebc9d15c2008dff567f46" datatype="html">
|
||||
<source>Role</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<target>Jogkör</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="e3fcf58f9472d33a35df59fe5520e3b8b41d6951" datatype="html">
|
||||
<source>+ Add user
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<target>+ Felhasználó hozzáadása</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="eebaef174029db4c77c4f7d1c68070774730f4d3" datatype="html">
|
||||
<source>
|
||||
To protect the site with password / have login enable this.
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<target>A webhely jelszóval legyen védve / be kelljen jelentkezni</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2df47a22f05b9ac3bdabb6693d4bc37c3ad7c000" datatype="html">
|
||||
<source>Add new User</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<target>Új felhasználó hozzáadása</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">
|
||||
<source>Close</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
</context-group>
|
||||
<target>Bezárás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6a518f3a8fcc0357ddd9e9115b66d281b81eb3b" datatype="html">
|
||||
<source>Add User
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<target>Felhasználó hozzáadása</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="25e15358423a68caf2960ac3eac6f7cfd19d5a30" datatype="html">
|
||||
<source>Database settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<target>Adatbázis beállítások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="e78c0d60ac39787f62c9159646fe0b3c1ed55a1d" datatype="html">
|
||||
<source>Type:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
<target>Típus:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a0f01d7b9e02e5d692259c94d790957604e6e03" datatype="html">
|
||||
<source>Install manually mysql node module to use mysql (npm install mysql)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
<target>Telepítsd kézzel mysql node-modult a mysql (npm install mysql) használatához</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1531e77d9dbcfb6a3efeb71fca40da5f5f7ddaaf" datatype="html">
|
||||
<source>MySQL settings:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<target>MySQL beállítások:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">
|
||||
<source>Host</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
</context-group>
|
||||
<target>Cím</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fb324ec7da611c6283caa6fc6257c39a56d6aaf7" datatype="html">
|
||||
<source>Database</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<target>adatbázis</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5b1d1f76e9702b36014e734fd24aa8c5c486784a" datatype="html">
|
||||
<source>SQLie settings:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<target>SQLite beállítások:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c84df9553019022cc521320e3afaed42f23feca1" datatype="html">
|
||||
<source>Save
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<target>Mentés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="606e35514c0bf86c3b47babbc76eb1bb4e973cb0" datatype="html">
|
||||
<source>Reset
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
<target>Visszaállítás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="808812b8319c389ecbb84c658d5b3eac7087d079" datatype="html">
|
||||
<source>Map settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<target>Térképbeállítások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ac5d327999abb61d7353f475edffa8b1f0a8ad7" datatype="html">
|
||||
<source>Google maps api key</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<target>Google maps api key</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="83d20bb14a5d264b30b919fd3b52903f0b7a124c" datatype="html">
|
||||
<source>To show the images on a map,</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
<target>Ahhoz, hogy a térképen megjelenjenek a képek</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b480df2a8ef25163f0c093fe11c336908c7b55c" datatype="html">
|
||||
<source>google api key</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<target>google api key-re</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0d727eb391d8b787f3195d51625ea8579b05506a" datatype="html">
|
||||
<source>is need</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<target>van szükség</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="d682be8fc94c1861394919e021e9dcf8def8f554" datatype="html">
|
||||
<source>Save
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">96</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">73</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/share/share.settings.component.ts</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">91</context>
|
||||
</context-group>
|
||||
<target>Mentés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="bdff31ca405839a31596fdb5bfd8ac933289b5e7" datatype="html">
|
||||
<source>Reset
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">99</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">76</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/share/share.settings.component.ts</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<target>Visszaállítás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="d6644690d6218f5ecc21dd3b2c69aca33d6d58c3" datatype="html">
|
||||
<source>Thumbnail settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<target>Thumbnail beállítások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6daacb1e448ebb5f72f1d6b1d6f9882dd3ad21f2" datatype="html">
|
||||
<source>It is highly recommended to use hardware accelerated (sharp or gm) lib for thumbnail generation
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<target>Nagyon ajánlott hardveresen gyorsított (sharp vagy gm) könyvtár használata a thumbnail generálásához</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f49ee2673fb82fe8dd1a7da0bada14a4156bf30" datatype="html">
|
||||
<source>Thumbnail generation library</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<target>Thumbnail generáló könyvtár</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="405e524b190e5a9325aa74a21736f05afbf0fe6c" datatype="html">
|
||||
<source>Make sure that sharp node module is installed (npm install sharp).</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<target>Győződj meg arról, hogy a sharp node modul telepítve van (npm telepítés sharp).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="becf05481d292e5e206fda4b7d67d8fac4e85c93" datatype="html">
|
||||
<source>Make sure that gm node module and</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<target>Győződjd meg arról, hogy a gm node modul és</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="50baaa30462f55de8e9b80d5762048f7ba4cecc4" datatype="html">
|
||||
<source>GraphicsMagick</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<target>GraphicsMagick</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b3dc2b50f4949565d88efab1f3ebd4236e16a082" datatype="html">
|
||||
<source>are installed (npm install sharp).</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<target>telepítve van (npm install éles).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="77dbc5bc9bc2a7dfc5394da0dcf5f08e4a120502" datatype="html">
|
||||
<source>Thumbnail folder</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<target>Thumbnail mappa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2e849a0c704352d5f4615880f47aea06025566f4" datatype="html">
|
||||
<source>Thumbnails will be saved in this folder. Write access is required</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<target>A thumbnail-ek ebben a mappában lesznek elmentve. Írási jog szükséges</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="76a16cf361d95615469c06e26644b6e52f3a4411" datatype="html">
|
||||
<source>Thumbnail Quality</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
<target>Thumbnail minőség</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b2d8e74a49c92e56ab68a248c5090187b16da0ae" datatype="html">
|
||||
<source>High quality may be slow. Especially with Jimp.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<target>A jó minőségű lassú lehet. Különösen a Jimp esetén.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b1a101e4cac6b5af1e4710d01ad2da24b494e982" datatype="html">
|
||||
<source>Icon size (used on maps)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<target>Ikonméret (térképeken használva)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="695e937f7b52084765c07a2b1269a040024a2363" datatype="html">
|
||||
<source>Thumbnail sizes</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<target>Thumbnail méretek</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ccfcda4d4700752fafcce0d40a3a6765056c200a" datatype="html">
|
||||
<source>Size of the thumbnails.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
<target>A thumbnail mérete.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="11b5800486a59a25fad47fa9850420f83ccbe52b" datatype="html">
|
||||
<source>The best matching size will be generated. (More size gives better quality, but use storage to store and CPU to render.)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">86</context>
|
||||
</context-group>
|
||||
<target>A legjobban egyezett méret lesz generálva. (Több méret lehetőség jobb minőségéet eredményez, de processzort és tárhelyet fogyaszt)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5c43f65d4b1e7f4c12937babb0794e7b84a9a103" datatype="html">
|
||||
<source>';' separated integers. If size is 200, tha thumbnail will have 200^2 pixels.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
|
||||
<context context-type="linenumber">87</context>
|
||||
</context-group>
|
||||
<target>';'-val elválasztott egész számok. Ha a méret 200, akkor a thumnail-ok 200^2 pixelből fognak állni.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2e75ae3885931555902da6b288ed616843d5dc3c" datatype="html">
|
||||
<source>Search settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
<target>Keresési beállítások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fba3e700d434667e68ec31f38b2fed451955b6a3" datatype="html">
|
||||
<source>Autocomplete</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
</context-group>
|
||||
<target>Automatikus kiegészítés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3370f9ec1e5b41b30e8c1e0de57d4dfacd0e1360" datatype="html">
|
||||
<source>Show hints while typing search query</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<target>Kersési javaslatok megjelenítése a keresési szöveg beírása közben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4f3e132bcb74ee7c0a19eff3915163699c249340" datatype="html">
|
||||
<source>Instant search</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">48</context>
|
||||
</context-group>
|
||||
<target>Azonnali (instant) keresés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="d532897643597c8670a76f65514b4cf92990729f" datatype="html">
|
||||
<source>Enables showing search results, while typing search query</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<target>Lehetővé teszi a keresési eredmények megjelenítését a keresés beírása közben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fca20aaca9607b7bcfd32718fa299d107c73c32a" datatype="html">
|
||||
<source>
|
||||
Search is not supported with these settings
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/search/search.settings.component.ts</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<target>A keresés nem támogatott ezekkel a beállításokkal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ca3f59b3fe47e837455e9090470356d27d1f59e" datatype="html">
|
||||
<source>Share settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/share/share.settings.component.ts</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
</context-group>
|
||||
<target>Megosztási bállítások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6024b74e5baa9004f52b2d91fe37321412e328e4" datatype="html">
|
||||
<source>Password protected</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/share/share.settings.component.ts</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<target>Jelszóval védett</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0ea62fbed498f782a8d0cb876e2f8a8fff8ed6ed" datatype="html">
|
||||
<source>Enables password protected sharing links</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/share/share.settings.component.ts</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<target>Jelszóval védi a megoszott linkeket.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ec3e07d68edadc3aa5ad84f316e43f739a2bd962" datatype="html">
|
||||
<source>
|
||||
Sharing is not supported with these settings
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/share/share.settings.component.ts</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<target>A megosztás nem támogatott ezekkel a beállításokkal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe4fefb86d4b6629064ff0fa96fdc2b80fc151b0" datatype="html">
|
||||
<source>Basic settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<target>Egyszerű beállítások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="870d05214ce19848ea4b7fe698e9a2e73db0c715" datatype="html">
|
||||
<source>Page title</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
<target>Oldal cím</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0559356d4e98ee90a10ff16250a2bf139eac649b" datatype="html">
|
||||
<source>Port number. Port 80 is usually what you need.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
<target>Portszám. A 80-as port általában az, amire szükséged van.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b4b17c583a52ad8b6b15882c46d04ddbd7335816" datatype="html">
|
||||
<source>Images are loaded from this folder (read permission required)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<target>A képeket ebből a mappából tölti be (olvasási engedély szükséges)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="682679bea54c7cdc8fad228e65f4e35d8cf62275" datatype="html">
|
||||
<source>Page public url</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
<target>Oldal nyilvános urlje (webcím)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="46bb79be15f19c6081f5d139660695902930abbe" datatype="html">
|
||||
<source>If you access the page form local network its good to know the public url for creating sharing link</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
</context-group>
|
||||
<target>Ha helyi hálózatról nézed az oldalt, jó ha tudja az oldal a publikus címét, hogy tudjon megosztási linket generálni</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1e99f581a015c671d53abad7c7df6a5ad35bfe85" datatype="html">
|
||||
<source>Other settings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<target>Egyéb beállitások</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="07807dce2e0dc33743530dd6a8b0d1f24094884d" datatype="html">
|
||||
<source>Error: </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<target>Hiba:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ddf9beb42acb007fe4498e7f7d91fac6737156a5" datatype="html">
|
||||
<source>Threading</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
<target>Háttérszálon futtatás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c3dec2a9fda84d35b3f44f58e47876f5828d84d8" datatype="html">
|
||||
<source>Runs directory scanning and thumbnail generation (only for Jimp) in a different thread</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<target>Könyvtrá indexelést és thumnail generálást (csak Jimp esetén) háttérszálon futtatja.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c29451eea39ce561ed481264df985f6e3b9c39ae" datatype="html">
|
||||
<source>Scroll based thumbnail
|
||||
generation</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
<target>Scroll-ozás alapú thumbnail
|
||||
generálás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="bc8bf5e0d03910950af843d84ada25e3c709b677" datatype="html">
|
||||
<source>Those thumbnails get higher priority that are visible on the screen</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
<target>A képernyőn látható thumnailek nagyobb prioritással generálódnak</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1a693eac5c0c9ee65ea4e8db6e097806141e91f5" datatype="html">
|
||||
<source>Lazy image rendering</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
<target>Lazy kép megjelenítés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="adbdec7eb762da25495914232537db1f7b102d8a" datatype="html">
|
||||
<source>Shows only the required amount of photos at once. Renders more if page bottom is reached</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">64</context>
|
||||
</context-group>
|
||||
<target>Csak a szükséges mennyiségű fotót jeleníti meg egyszerre. újabbakat tölt be, ha elérte az oldal alját</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1fa92c6ce274f878b2625587daa7e08b2a3a8b38" datatype="html">
|
||||
<source>Cache</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">70</context>
|
||||
</context-group>
|
||||
<target>gyorsítótár</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3d5c836021af994d7ecf28083b0595dbd78b9915" datatype="html">
|
||||
<source>Caches directory contents and search results for better performance</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<target>Cach-eli a könyvtár tartalmát és a keresési eredményeket, hogy responzívabb legyen az oldal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="87b1696eb068572c3908643c425ee3090938c1a0" datatype="html">
|
||||
<source>Folder indexing</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">4</context>
|
||||
</context-group>
|
||||
<target>Mappa indexelése</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1be10583851301763cfa3b55d74670808986a583" datatype="html">
|
||||
<source>Index cache timeout [ms]</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">11</context>
|
||||
</context-group>
|
||||
<target>Index cache timeout [ms]</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1dd0f4aff02ce38e0a5935b379b9b28dc2c14a0a" datatype="html">
|
||||
<source>If there was no indexing in this time, it reindexes. (skipped if indexen in DB and sensitivity is low)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<target>Ha ennyi ideje nem volt indexelés, újraindexeli a könyvtárat. (kivéve, ha a DB index és az érzékenység alacsony)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="95cda683cfb2041ad808023f29e40d16981b3c5e" datatype="html">
|
||||
<source>Sub folder preview size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<target>Alkönyvtár előnézet mérete</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fda1d8005a79f58b5713b5ada5d0eb20321ff640" datatype="html">
|
||||
<source>Reads this many photos from sub folders</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
<target>Ennyi fotót olvas be az alkönytárból</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="d0a8aab4720af5526787eec8cfe8dd2e1bf20cac" datatype="html">
|
||||
<source>Folder reindexing sensitivity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<target>Folder újra indeyelés érzékenysége</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="dc94e5967c3fa68e0bc8fc48250a718cc826a40f" datatype="html">
|
||||
<source>Set the reindexing sensitivity. High value check the folders for change more often</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
</context-group>
|
||||
<target>Állítsa be az újraindexelés érzékenységét. A magasabb érzékenység gyarkabban ellenőrzi a mappákat válztozás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b8f78167ef95c21d032b15614e8239cc033a0fd2" datatype="html">
|
||||
<source>Save
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
</context-group>
|
||||
<target>Mentés</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae9e824f2eaba4400a5cb66ad946c433dc45b3d5" datatype="html">
|
||||
<source>Reset
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<target>Visszaállítás</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b0eaa3abce5af3b71c03fe678062333b7b950430" datatype="html">
|
||||
<source>If you add a new folder to your gallery, the site indexes it automatically.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<target>Ha új mappát ad hozzá a galériához, a webhely automatikusan indexeli.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2622cf599561bd3154f42feef9ac9960a316a6eb" datatype="html">
|
||||
<source>If you would like to trigger indexing manually, click index button.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
</context-group>
|
||||
<target>Ha kézzel szeretné indítani az indexelést, kattintson az index gombra.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9061efbc0c389083e0652206d2b92c8aa68bc722" datatype="html">
|
||||
<source>Note: search ony searched among the indexed directories</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">62</context>
|
||||
</context-group>
|
||||
<target>Megjegyzés: a keresés csak az indexelet mappákban működik</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="32cc8ef8dc6f4f239b7f637ac8adaecc55b8e1d8" datatype="html">
|
||||
<source>Index
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<target>Index</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="e7e43ec575247424aa179da55b338fd740e8aa7f" datatype="html">
|
||||
<source>Cancel
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<target>Mégse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="d68e02eaea0b78b12fceb483b2183a3f5b70d969" datatype="html">
|
||||
<source>Reset Indexes
|
||||
</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
|
||||
<context context-type="linenumber">93</context>
|
||||
</context-group>
|
||||
<target>Indexek törlése</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
@ -9,5 +9,13 @@
|
||||
"exclude": [
|
||||
"test.ts",
|
||||
"**/*.spec.ts"
|
||||
],
|
||||
"include": [
|
||||
"./**/*",
|
||||
"./../node_modules/jw-bootstrap-switch-ng2/dist/index.ts",
|
||||
"./../node_modules/jw-bootstrap-switch-ng2/dist/directive.ts",
|
||||
"./../node_modules/ngx-clipboard/src/index.ts",
|
||||
"./../node_modules/ngx-clipboard/src/clipboard.directive.ts",
|
||||
"./../node_modules/ngx-clipboard/src/clipboard.service.ts"
|
||||
]
|
||||
}
|
||||
|
59
gulpfile.js
59
gulpfile.js
@ -1,6 +1,7 @@
|
||||
var ts = require('gulp-typescript');
|
||||
var gulp = require('gulp');
|
||||
var zip = require('gulp-zip');
|
||||
var fs = require('fs');
|
||||
var runSequence = require('run-sequence');
|
||||
var jsonModify = require('gulp-json-modify');
|
||||
var exec = require('child_process').exec;
|
||||
@ -15,12 +16,37 @@ gulp.task('build-backend', function () {
|
||||
.pipe(gulp.dest("./release"))
|
||||
|
||||
});
|
||||
gulp.task('build-frontend', function (cb) {
|
||||
exec("ng build -prod --output-path=./release/dist --no-progress", function (err, stdout, stderr) {
|
||||
console.log(stdout);
|
||||
console.log(stderr);
|
||||
cb(err);
|
||||
var createFornendTask = function (tpye, script) {
|
||||
gulp.task(tpye, function (cb) {
|
||||
exec(script, function (err, stdout, stderr) {
|
||||
console.log(stdout);
|
||||
console.log(stderr);
|
||||
cb(err);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
gulp.task('build-frontend', function (done) {
|
||||
var dirCont = fs.readdirSync("./frontend/locale");
|
||||
var files = dirCont.filter(function (elm) {
|
||||
return elm.match(/.*\.[a-zA-Z]+\.(xlf)/ig);
|
||||
});
|
||||
var languages = files.map(function (f) {
|
||||
return f.split(".")[1]
|
||||
});
|
||||
var tasks = [];
|
||||
createFornendTask('build-frontend default', "ng build --aot -prod --output-path=./release/dist --no-progress");
|
||||
tasks.push('build-frontend default');
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
createFornendTask('build-frontend ' + languages[i], "ng build --aot -prod --output-path=./release/dist/" + languages[i] + " --no-progress --locale " + languages[i] + " --i18n-format xlf --i18n-file frontend/locale/" + files[i] + " --missing-translation warning");
|
||||
tasks.push('build-frontend ' + languages[i]);
|
||||
}
|
||||
tasks.push(function () {
|
||||
done();
|
||||
});
|
||||
|
||||
runSequence.apply(this, tasks);
|
||||
|
||||
});
|
||||
|
||||
gulp.task('copy-static', function () {
|
||||
@ -56,3 +82,26 @@ gulp.task('build-release', function (done) {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
gulp.task('build-dev', function (done) {
|
||||
var dirCont = fs.readdirSync("./frontend/locale");
|
||||
var files = dirCont.filter(function (elm) {
|
||||
return elm.match(/.*\.[a-zA-Z]+\.(xlf)/ig);
|
||||
});
|
||||
var languages = files.map(function (f) {
|
||||
return f.split(".")[1]
|
||||
});
|
||||
var tasks = [];
|
||||
createFornendTask('build-frontend-dev default', "ng build --prod --output-path=./dist --no-progress");
|
||||
tasks.push('build-frontend-dev default');
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
createFornendTask('build-frontend-dev ' + languages[i], "ng build --prod --output-path=./dist/" + languages[i] + " --no-progress --locale " + languages[i] + " --i18n-format xlf --i18n-file frontend/locale/" + files[i] + " --missing-translation warning");
|
||||
tasks.push('build-frontend-dev ' + languages[i]);
|
||||
}
|
||||
tasks.push(function () {
|
||||
done();
|
||||
});
|
||||
|
||||
runSequence.apply(this, tasks);
|
||||
});
|
||||
|
45
package.json
45
package.json
@ -15,7 +15,8 @@
|
||||
"start": "node ./backend/index",
|
||||
"ng": "ng",
|
||||
"lint": "ng lint",
|
||||
"e2e": "ng e2e"
|
||||
"e2e": "ng e2e",
|
||||
"build-hu": "ng build --aot --output-path=./dist/hu --locale hu --i18n-format xlf --i18n-file frontend/locale/messages.hu.xlf --missing-translation warning"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -27,10 +28,12 @@
|
||||
"dependencies": {
|
||||
"bcryptjs": "2.4.3",
|
||||
"body-parser": "1.18.2",
|
||||
"cookie-parser": "^1.4.3",
|
||||
"cookie-session": "2.0.0-beta.3",
|
||||
"ejs": "2.5.7",
|
||||
"express": "4.16.2",
|
||||
"jimp": "0.2.28",
|
||||
"locale": "^0.1.0",
|
||||
"mysql": "2.15.0",
|
||||
"reflect-metadata": "0.1.10",
|
||||
"sqlite3": "3.1.13",
|
||||
@ -42,26 +45,26 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@agm/core": "^1.0.0-beta.2",
|
||||
"@angular/animations": "^5.1.1",
|
||||
"@angular/cli": "1.6.1",
|
||||
"@angular/common": "~5.1.1",
|
||||
"@angular/compiler": "~5.1.1",
|
||||
"@angular/compiler-cli": "^5.1.1",
|
||||
"@angular/core": "~5.1.1",
|
||||
"@angular/forms": "~5.1.1",
|
||||
"@angular/http": "~5.1.1",
|
||||
"@angular/language-service": "^5.1.1",
|
||||
"@angular/platform-browser": "~5.1.1",
|
||||
"@angular/platform-browser-dynamic": "~5.1.1",
|
||||
"@angular/router": "~5.1.1",
|
||||
"@angular/animations": "^5.1.2",
|
||||
"@angular/cli": "1.6.2",
|
||||
"@angular/common": "~5.1.2",
|
||||
"@angular/compiler": "~5.1.2",
|
||||
"@angular/compiler-cli": "^5.1.2",
|
||||
"@angular/core": "~5.1.2",
|
||||
"@angular/forms": "~5.1.2",
|
||||
"@angular/http": "~5.1.2",
|
||||
"@angular/language-service": "^5.1.2",
|
||||
"@angular/platform-browser": "~5.1.2",
|
||||
"@angular/platform-browser-dynamic": "~5.1.2",
|
||||
"@angular/router": "~5.1.2",
|
||||
"@types/bcryptjs": "^2.4.1",
|
||||
"@types/chai": "^4.0.10",
|
||||
"@types/cookie-session": "^2.0.34",
|
||||
"@types/express": "^4.0.39",
|
||||
"@types/express": "^4.11.0",
|
||||
"@types/gm": "^1.17.33",
|
||||
"@types/jasmine": "^2.8.2",
|
||||
"@types/jimp": "^0.2.1",
|
||||
"@types/node": "^8.5.1",
|
||||
"@types/jimp": "^0.2.28",
|
||||
"@types/node": "^8.5.2",
|
||||
"@types/sharp": "^0.17.6",
|
||||
"@types/winston": "^2.3.7",
|
||||
"bootstrap": "^3.3.7",
|
||||
@ -77,10 +80,10 @@
|
||||
"intl": "^1.2.5",
|
||||
"jasmine-core": "^2.8.0",
|
||||
"jasmine-spec-reporter": "~4.2.1",
|
||||
"jw-bootstrap-switch-ng2": "^1.0.8",
|
||||
"karma": "^1.7.1",
|
||||
"jw-bootstrap-switch-ng2": "1.0.8",
|
||||
"karma": "^2.0.0",
|
||||
"karma-cli": "^1.0.1",
|
||||
"karma-coverage-istanbul-reporter": "^1.3.0",
|
||||
"karma-coverage-istanbul-reporter": "^1.3.1",
|
||||
"karma-jasmine": "^1.1.1",
|
||||
"karma-jasmine-html-reporter": "^0.2.2",
|
||||
"karma-phantomjs-launcher": "^1.0.4",
|
||||
@ -98,9 +101,9 @@
|
||||
"remap-istanbul": "^0.9.5",
|
||||
"rimraf": "^2.6.2",
|
||||
"run-sequence": "^2.2.0",
|
||||
"rxjs": "^5.5.5",
|
||||
"rxjs": "^5.5.6",
|
||||
"ts-helpers": "^1.1.2",
|
||||
"ts-node": "~4.0.2",
|
||||
"ts-node": "~4.1.0",
|
||||
"tslint": "^5.8.0",
|
||||
"typescript": "^2.6.2",
|
||||
"zone.js": "^0.8.18"
|
||||
|
Loading…
Reference in New Issue
Block a user