mirror of https://gitlab.com/openlp/web-remote.git
Compare commits
82 Commits
Author | SHA1 | Date |
---|---|---|
Chris Witterholt | 2a480e8c3e | |
Chris Witterholt | 38149d2279 | |
Tim Bentley | ed39a01b67 | |
Chris Witterholt | f4f3d7b444 | |
Chris Witterholt | 7020ae0bde | |
Chris Witterholt | a58c13d82d | |
Chris Witterholt | 55610e623f | |
Chris Witterholt | 06a172fcc1 | |
Chris Witterholt | b29cad5225 | |
Chris Witterholt | 1144564c2c | |
Chris Witterholt | bf185b0f92 | |
Raoul Snyman | 40c4d9e363 | |
Raoul Snyman | 4a25c28f29 | |
Chris Witterholt | 7b245d248b | |
Chris Witterholt | da749d7ec8 | |
Raoul Snyman | 08d097dd0a | |
Raoul Snyman | fcc1f543d0 | |
Raoul Snyman | 4fd8fe0f54 | |
Chris Witterholt | f657a24e99 | |
Chris Witterholt | 037d0ccb40 | |
Chris Witterholt | ff8c01c874 | |
Chris Witterholt | 86d85870e9 | |
Chris Witterholt | a6b4ea23c8 | |
Chris Witterholt | 75c11d4543 | |
Chris Witterholt | ece665dbf2 | |
Chris Witterholt | b62f21bae0 | |
Chris Witterholt | 18ba69088b | |
Chris Witterholt | 89c908ef4a | |
Chris Witterholt | ee9392cc01 | |
Chris Witterholt | ea39bbc3d7 | |
Raoul Snyman | 544b400829 | |
Raoul Snyman | db8202983f | |
Raoul Snyman | ce9fa57d9e | |
Raoul Snyman | a6f348d71b | |
Raoul Snyman | 55cccff3ed | |
Raoul Snyman | 3be49dbd74 | |
Chris Witterholt | ed3b71ef9e | |
Chris Witterholt | 5a9e1b56ac | |
Chris Witterholt | 5550648d20 | |
Chris Witterholt | 0fdcbff737 | |
Chris Witterholt | ce064facda | |
Chris Witterholt | fe07f78415 | |
Chris Witterholt | 4e09f0a08d | |
Chris Witterholt | 2e58a547ac | |
Chris Witterholt | 87aefcdbf0 | |
Chris Witterholt | b44be59d06 | |
Chris Witterholt | a255c0f00e | |
Chris Witterholt | 64b4713e43 | |
Chris Witterholt | f34830dee6 | |
Chris Witterholt | c9ff11dd58 | |
Chris Witterholt | f0554b8e53 | |
Chris Witterholt | 93a7786d8a | |
Chris Witterholt | 6bc707dc46 | |
Raoul Snyman | fcbc845ae6 | |
Raoul Snyman | 3ad18e5427 | |
Chris Witterholt | 0ef9e8fb2a | |
Chris Witterholt | f0227e049a | |
Chris Witterholt | a14eb0d1c6 | |
Chris Witterholt | dc253e74ec | |
Chris Witterholt | 9d9df01d3e | |
Chris Witterholt | bf0e14caee | |
Chris Witterholt | 5d674aa3be | |
Chris Witterholt | 1b36340d57 | |
Chris Witterholt | 30f44cb543 | |
Chris Witterholt | 4104033b4b | |
Chris Witterholt | dff8c49a81 | |
Chris Witterholt | bdfd1c1ab1 | |
Chris Witterholt | 80c54bee88 | |
Raoul Snyman | 01724bb136 | |
Chris Witterholt | 7ad8daff62 | |
Raoul Snyman | ed9db1d295 | |
Chris Witterholt | b92175d024 | |
Chris Witterholt | 2346fdc62a | |
Chris Witterholt | cb536702e1 | |
Raoul Snyman | 07086a39fa | |
Chris Witterholt | 551e8dca13 | |
Raoul Snyman | cd29766127 | |
Chris Witterholt | cbc8cd260e | |
Tim Bentley | 2833875e19 | |
Chris Witterholt | 07462f98c1 | |
Raoul Snyman | a5753112af | |
Chris Witterholt | 20aea00c85 |
|
@ -1,7 +1,4 @@
|
|||
last 10 Chrome version
|
||||
last 10 Firefox version
|
||||
last 10 Edge major versions
|
||||
last 2 Safari major versions
|
||||
last 2 iOS major versions
|
||||
Firefox ESR
|
||||
not IE >= 0 # IE is dead
|
||||
# After changes are made to this file run the script 'supportedBrowsers' to update the JS file,
|
||||
# see: https://www.npmjs.com/package/browserslist-useragent-regexp?activeTab=readme
|
||||
defaults
|
||||
fully supports resizeobserver
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
!.vscode/extensions.json
|
||||
|
||||
# misc
|
||||
/.nx
|
||||
/.sass-cache
|
||||
/connect.lock
|
||||
/coverage
|
||||
|
|
|
@ -10,8 +10,8 @@ audit:
|
|||
script:
|
||||
- yarn install
|
||||
- yarn audit
|
||||
except:
|
||||
- tags
|
||||
rules:
|
||||
- when: always
|
||||
allow_failure: true
|
||||
|
||||
lint:
|
||||
|
@ -19,44 +19,62 @@ lint:
|
|||
script:
|
||||
- yarn install
|
||||
- yarn lint
|
||||
except:
|
||||
- tags
|
||||
rules:
|
||||
- when: always
|
||||
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
- yarn install
|
||||
- yarn test --no-progress --no-watch --browsers=ChromiumHeadlessCI
|
||||
except:
|
||||
- tags
|
||||
rules:
|
||||
- when: always
|
||||
|
||||
push-i18n-source:
|
||||
stage: build
|
||||
script:
|
||||
- apk add npm
|
||||
- npm install @transifex/api
|
||||
- npm run tx push
|
||||
rules:
|
||||
- changes:
|
||||
- src/assets/en.json
|
||||
|
||||
build-branch:
|
||||
stage: build
|
||||
script:
|
||||
- yarn install
|
||||
# Temporarily install npm manually until we get it added to the runner image
|
||||
- apk add npm
|
||||
- yarn install --production
|
||||
- npm install @angular/cli
|
||||
- yarn build --no-progress --configuration production --aot
|
||||
- export APP_VERSION=`git describe --dirty --tags --long --match '*[0-9]*'`
|
||||
- 'echo "window.appVersion = \"$APP_VERSION\";" > dist/web-remote/assets/version.js'
|
||||
artifacts:
|
||||
paths:
|
||||
- dist/
|
||||
only:
|
||||
- branches
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH != "master"
|
||||
|
||||
build-tag:
|
||||
stage: build
|
||||
script:
|
||||
- yarn install
|
||||
# Temporarily install npm manually until we get it added to the runner image
|
||||
- apk add npm
|
||||
- yarn install --production
|
||||
- npm install @angular/cli
|
||||
- yarn build --no-progress --configuration production --aot
|
||||
- 'echo "window.appVersion = \"$CI_COMMIT_TAG\";" > dist/web-remote/assets/version.js'
|
||||
artifacts:
|
||||
paths:
|
||||
- dist/
|
||||
only:
|
||||
- tags
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
|
||||
deploy:
|
||||
stage: deploy
|
||||
variables:
|
||||
OPENLP_HOST: "new.openlp.io"
|
||||
script:
|
||||
- cd dist/web-remote
|
||||
- zip -r ../../remote-$CI_COMMIT_TAG.zip *
|
||||
|
@ -70,10 +88,10 @@ deploy:
|
|||
- eval $(ssh-agent -s)
|
||||
- ssh-add ~/.ssh/id_rsa
|
||||
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
|
||||
- ssh openlp@openlp.io "mkdir -p /home/openlp/sites/get.openlp.org/www/remote/$CI_COMMIT_TAG"
|
||||
- scp remote-$CI_COMMIT_TAG.zip openlp@openlp.io:/home/openlp/sites/get.openlp.org/www/remote/$CI_COMMIT_TAG/
|
||||
- scp version-$CI_COMMIT_TAG.json openlp@openlp.io:/home/openlp/sites/get.openlp.org/www/remote/
|
||||
- ssh openlp@openlp.io "rm /home/openlp/sites/get.openlp.org/www/remote/version.json"
|
||||
- scp version-$CI_COMMIT_TAG.json openlp@openlp.io:/home/openlp/sites/get.openlp.org/www/remote/version.json
|
||||
only:
|
||||
- tags
|
||||
- ssh openlp@$OPENLP_HOST "mkdir -p /home/openlp/sites/get.openlp.org/www/remote/$CI_COMMIT_TAG"
|
||||
- scp remote-$CI_COMMIT_TAG.zip openlp@$OPENLP_HOST:/home/openlp/sites/get.openlp.org/www/remote/$CI_COMMIT_TAG/
|
||||
- scp version-$CI_COMMIT_TAG.json openlp@$OPENLP_HOST:/home/openlp/sites/get.openlp.org/www/remote/
|
||||
- ssh openlp@$OPENLP_HOST "rm /home/openlp/sites/get.openlp.org/www/remote/version.json"
|
||||
- scp version-$CI_COMMIT_TAG.json openlp@$OPENLP_HOST:/home/openlp/sites/get.openlp.org/www/remote/version.json
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
|
|
|
@ -1,6 +1,71 @@
|
|||
Changes in OpenLP Web Remote
|
||||
============================
|
||||
|
||||
Version 0.9.21
|
||||
--------------
|
||||
|
||||
* Force capitalization in translations when version 3.1.2 or newer is installed.
|
||||
* Updated zone.js.
|
||||
|
||||
Version 0.9.20
|
||||
--------------
|
||||
|
||||
* Force capitalization in translations when version 3.1.2 or newer is installed.
|
||||
* Updated dependencies including Angular.
|
||||
|
||||
Version 0.9.19
|
||||
--------------
|
||||
|
||||
* Hook Web Remote up to Transifex regarding the translations.
|
||||
* Add some missing translations.
|
||||
* Make sure that the English translation will function in Web Remote when version 3.1.2 or newer is installed.
|
||||
* The page title is not capitalized anymore.
|
||||
* Prevent a TypeError in the browser console when Settings is displayed and there are no live items.
|
||||
* Updated dependencies including Angular.
|
||||
|
||||
Version 0.9.18
|
||||
--------------
|
||||
|
||||
* Prevent HTTP 404 error in browser console when using Web API 2.4 or older.
|
||||
* Remove Hammerjs.
|
||||
|
||||
Version 0.9.17
|
||||
--------------
|
||||
|
||||
* Add workaround for missing default English translation file when using Web API 2.4 or older.
|
||||
* Correct Slovenian translation.
|
||||
|
||||
Version 0.9.16
|
||||
--------------
|
||||
|
||||
* Make use of the configured language in OpenLP in order to use translations in Web Remote when version 3.1.2 or newer is installed.
|
||||
* Updated dependencies including Angular.
|
||||
|
||||
Version 0.9.15
|
||||
--------------
|
||||
|
||||
* Added a Web Remote setting to switch larger display buttons on or off (off by default).
|
||||
* Updated dependencies including Angular.
|
||||
|
||||
Version 0.9.14
|
||||
--------------
|
||||
|
||||
* Make sure that all the clients auto scroll to the selected slide.
|
||||
* Make use of the configured shortcuts in OpenLP when version 3.1.2 or newer is installed.
|
||||
* Updated dependencies including Angular.
|
||||
|
||||
Version 0.9.13
|
||||
--------------
|
||||
|
||||
* Change detection of unsupported browser version.
|
||||
* Display the instructions how to downgrade to a previous version when the browser is not supported.
|
||||
|
||||
Version 0.9.12
|
||||
--------------
|
||||
|
||||
* Display a download link for previous releases instead of crashing when the browser is not supported.
|
||||
* Minor update of Angular.
|
||||
|
||||
Version 0.9.11
|
||||
--------------
|
||||
|
||||
|
|
|
@ -24,14 +24,42 @@ To run the web remote, run the following command:
|
|||
|
||||
.. code::
|
||||
|
||||
yarn run
|
||||
yarn start
|
||||
|
||||
|
||||
To build the web remote manually for deployment:
|
||||
|
||||
.. code::
|
||||
|
||||
yarn build --prod --aot
|
||||
yarn build --aot
|
||||
|
||||
|
||||
To lint the web remote:
|
||||
|
||||
.. code::
|
||||
|
||||
yarn lint
|
||||
|
||||
|
||||
To audit the web remote:
|
||||
|
||||
.. code::
|
||||
|
||||
yarn audit
|
||||
|
||||
|
||||
To run unit tests on the web remote using the Chrome browser:
|
||||
|
||||
.. code::
|
||||
|
||||
yarn test --browsers Chrome
|
||||
|
||||
|
||||
To run unit tests on the web remote using the Microsoft Edge browser:
|
||||
|
||||
.. code::
|
||||
|
||||
yarn test --browsers Edge
|
||||
|
||||
|
||||
Deployment
|
||||
|
|
72
package.json
72
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@openlp/web-remote",
|
||||
"version": "0.9.11",
|
||||
"version": "0.9.21",
|
||||
"description": "The web remote for OpenLP, written in Angular",
|
||||
"keywords": [
|
||||
"OpenLP",
|
||||
|
@ -20,55 +20,63 @@
|
|||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"test": "ng test",
|
||||
"lint": "ng lint"
|
||||
"lint": "ng lint",
|
||||
"supportedBrowsers": "(echo module.exports = && browserslist-useragent-regexp --allowHigherVersions) > src/assets/supportedBrowsers.js",
|
||||
"tx": "node scripts/tx.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/animations": "^17.1.3",
|
||||
"@angular/cdk": "^17.1.2",
|
||||
"@angular/common": "^17.1.3",
|
||||
"@angular/compiler": "^17.1.3",
|
||||
"@angular/core": "^17.1.3",
|
||||
"@angular/forms": "^17.1.3",
|
||||
"@angular/material": "^17.1.2",
|
||||
"@angular/platform-browser": "^17.1.3",
|
||||
"@angular/platform-browser-dynamic": "^17.1.3",
|
||||
"@angular/router": "^17.1.3",
|
||||
"@fontsource/roboto": "^5.0.8",
|
||||
"core-js": "^3.35.1",
|
||||
"hammerjs": "^2.0.8",
|
||||
"@angular/animations": "^17.3.9",
|
||||
"@angular/cdk": "^17.3.9",
|
||||
"@angular/common": "^17.3.9",
|
||||
"@angular/compiler": "^17.3.9",
|
||||
"@angular/core": "^17.3.9",
|
||||
"@angular/forms": "^17.3.9",
|
||||
"@angular/material": "^17.3.9",
|
||||
"@angular/platform-browser": "^17.3.9",
|
||||
"@angular/platform-browser-dynamic": "^17.3.9",
|
||||
"@angular/router": "^17.3.9",
|
||||
"@fontsource/roboto": "^5.0.13",
|
||||
"@ngx-translate/core": "^15.0.0",
|
||||
"@ngx-translate/http-loader": "^8.0.0",
|
||||
"core-js": "^3.37.1",
|
||||
"material-icons": "^1.13.12",
|
||||
"rxjs": "^7.8.1",
|
||||
"zone.js": "^0.14.3"
|
||||
"zone.js": "^0.14.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "^17.1.3",
|
||||
"@angular-eslint/builder": "^17.1.3",
|
||||
"@angular-eslint/eslint-plugin": "^17.1.3",
|
||||
"@angular-eslint/eslint-plugin-template": "^17.1.3",
|
||||
"@angular-eslint/schematics": "^17.1.3",
|
||||
"@angular-eslint/template-parser": "^17.1.3",
|
||||
"@angular/cli": "~17.1.3",
|
||||
"@angular/compiler-cli": "^17.1.3",
|
||||
"@angular/language-service": "^17.1.3",
|
||||
"@angular-devkit/build-angular": "^17.3.7",
|
||||
"@angular-eslint/builder": "^17.4.1",
|
||||
"@angular-eslint/eslint-plugin": "^17.4.1",
|
||||
"@angular-eslint/eslint-plugin-template": "^17.4.1",
|
||||
"@angular-eslint/schematics": "^17.4.1",
|
||||
"@angular-eslint/template-parser": "^17.4.1",
|
||||
"@angular/cli": "~17.3.7",
|
||||
"@angular/compiler-cli": "^17.3.9",
|
||||
"@angular/language-service": "^17.3.9",
|
||||
"@chiragrupani/karma-chromium-edge-launcher": "^2.3.1",
|
||||
"@transifex/api": "^7.1.0",
|
||||
"@types/jasmine": "~5.1.4",
|
||||
"@types/jasminewd2": "~2.0.13",
|
||||
"@types/node": "~20.11.17",
|
||||
"@typescript-eslint/eslint-plugin": "6.21.0",
|
||||
"@typescript-eslint/parser": "6.21.0",
|
||||
"eslint": "^8.56.0",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/node": "~20.12.12",
|
||||
"@typescript-eslint/eslint-plugin": "7.9.0",
|
||||
"@typescript-eslint/parser": "7.9.0",
|
||||
"axios": "^1.6.8",
|
||||
"browserslist": "^4.23.0",
|
||||
"browserslist-useragent-regexp": "^4.1.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-plugin-import": "~2.29.1",
|
||||
"eslint-plugin-jsdoc": "~48.0.6",
|
||||
"eslint-plugin-jsdoc": "~48.2.5",
|
||||
"eslint-plugin-prefer-arrow": "~1.2.3",
|
||||
"jasmine-core": "~5.1.2",
|
||||
"jasmine-spec-reporter": "~7.0.0",
|
||||
"karma": "~6.4.2",
|
||||
"karma": "~6.4.3",
|
||||
"karma-chrome-launcher": "~3.2.0",
|
||||
"karma-coverage-istanbul-reporter": "~3.0.3",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "^2.1.0",
|
||||
"ts-node": "~10.9.2",
|
||||
"typescript": "~5.3.3"
|
||||
"typescript": "~5.4.5"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
|
|
@ -0,0 +1,158 @@
|
|||
const fs = require('fs');
|
||||
const process = require('process');
|
||||
const path = require('path');
|
||||
const { parseArgs } = require('util');
|
||||
const { transifexApi } = require('@transifex/api');
|
||||
const axios = require('axios');
|
||||
|
||||
const ACTIONS = ['push', 'upload', 'download'];
|
||||
|
||||
// Parse the command line arguments
|
||||
function parseCliArgs() {
|
||||
const options = {
|
||||
token: {
|
||||
type: 'string',
|
||||
short: 't'
|
||||
},
|
||||
verbose: {
|
||||
type: 'boolean',
|
||||
short: 'v',
|
||||
default: false
|
||||
},
|
||||
help: {
|
||||
type: 'boolean',
|
||||
short: 'h',
|
||||
default: false
|
||||
}
|
||||
};
|
||||
const { values, positionals } = parseArgs({options: options, allowPositionals: true});
|
||||
if (values.help) {
|
||||
console.log(`usage: tx [-h|--help] [-v|--verbose] [-t|--token TOKEN] <action>
|
||||
|
||||
positional arguments:
|
||||
action the action to perform, one of 'push', 'upload' or 'download'
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-e, --verbose show extra logging messages
|
||||
-t TOKEN, --token TOKEN
|
||||
specify a Transifex API token, can also use the TX_TOKEN environment variable
|
||||
`);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (!values.token && !process.env.TX_TOKEN) {
|
||||
console.error("ERROR: Neither --token nor TX_TOKEN was set");
|
||||
process.exit(1);
|
||||
}
|
||||
else if (!values.token && process.env.TX_TOKEN) {
|
||||
values.token = process.env.TX_TOKEN;
|
||||
}
|
||||
if (positionals.length < 1 || !ACTIONS.includes(positionals[0])) {
|
||||
console.error("ERROR: Action is not valid, please use one of " + ACTIONS.join(", "));
|
||||
process.exit(1);
|
||||
}
|
||||
return {token: values.token, action: positionals[0], verbose: values.verbose};
|
||||
}
|
||||
|
||||
|
||||
function getPercentage(attributes) {
|
||||
return (parseFloat(attributes.translated_strings) / parseFloat(attributes.total_strings)) * 100;
|
||||
}
|
||||
|
||||
|
||||
async function pushSource(resource, verbose) {
|
||||
const filename = path.join('src', 'assets', 'en.json');
|
||||
if (!fs.existsSync(filename)) {
|
||||
console.error(`Source file ${filename} does not exist!`);
|
||||
process.exit(1);
|
||||
}
|
||||
if (verbose) {
|
||||
console.log('Reading en.json...');
|
||||
}
|
||||
let content = fs.readFileSync(filename);
|
||||
let json = JSON.parse(content);
|
||||
delete json._COMMENT;
|
||||
content = JSON.stringify(json);
|
||||
console.log('Uploading en.json...');
|
||||
await transifexApi.ResourceStringsAsyncUpload.upload({
|
||||
resource: resource,
|
||||
content: content.toString()
|
||||
});
|
||||
}
|
||||
|
||||
async function uploadFiles(resource, languages, verbose) {
|
||||
for (const lang of languages) {
|
||||
const filename = path.join('src', 'assets', 'i18n', `${lang.attributes.code}.json`);
|
||||
if (!fs.existsSync(filename)) {
|
||||
continue;
|
||||
}
|
||||
if (verbose) {
|
||||
console.log(`Reading ${lang.attributes.code}.json...`);
|
||||
}
|
||||
const content = fs.readFileSync(filename);
|
||||
console.log(`Uploading ${lang.attributes.code}.json...`);
|
||||
await transifexApi.ResourceTranslationsAsyncUpload.upload({
|
||||
resource: resource,
|
||||
language: lang,
|
||||
content: content.toString()
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadFiles(org, project, resource, languages, verbose) {
|
||||
for (const lang of languages) {
|
||||
if (verbose) {
|
||||
console.log(`Checking completeness of ${lang.attributes.code}.json...`);
|
||||
}
|
||||
const trs = await transifexApi.ResourceLanguageStats.get({
|
||||
project: project,
|
||||
resource: resource,
|
||||
language: lang
|
||||
});
|
||||
if (getPercentage(trs.attributes) < 50) {
|
||||
continue;
|
||||
}
|
||||
console.log(`Downloading ${lang.attributes.code}.json...`);
|
||||
const url = await transifexApi.ResourceTranslationsAsyncDownload.download({
|
||||
resource: resource,
|
||||
language: lang
|
||||
});
|
||||
const response = await axios.get(url);
|
||||
if (response.status == 200) {
|
||||
fs.writeFileSync(path.join('src', 'assets', 'i18n', `${lang.attributes.code}.json`), JSON.stringify(response.data, null, 2));
|
||||
}
|
||||
else {
|
||||
console.log(`Error: ${response.statusText}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// Parse the command line arguments
|
||||
const { token, action, verbose } = parseCliArgs();
|
||||
|
||||
// Set up the Transifex API
|
||||
transifexApi.setup({auth: token});
|
||||
|
||||
if (verbose) {
|
||||
console.log('Fetching organization, project and languages...');
|
||||
}
|
||||
const org = await transifexApi.Organization.get({slug: 'openlp'});
|
||||
const projects = await org.fetch('projects');
|
||||
const proj = await projects.get({slug: 'web-remote'});
|
||||
const resource = await transifexApi.Resource.get({project: proj, slug: 'i18n-strings'});
|
||||
const languages = await proj.fetch('languages');
|
||||
await languages.fetch();
|
||||
if (action == 'upload') {
|
||||
await uploadFiles(resource, languages.data, verbose);
|
||||
}
|
||||
else if (action == 'download') {
|
||||
await downloadFiles(org, proj, resource, languages.data, verbose);
|
||||
}
|
||||
else if (action == 'push') {
|
||||
await pushSource(resource, verbose);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
|
@ -1,46 +1,98 @@
|
|||
<mat-toolbar color="primary">
|
||||
<mat-toolbar-row>
|
||||
<button mat-icon-button (click)="menu.toggle()"><mat-icon>menu</mat-icon></button>
|
||||
<span class="page-title">{{pageTitle}}</span>
|
||||
<span class="spacer"></span>
|
||||
<button *ngIf="showLogin" mat-button (click)="login()">Login</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
[matTooltip]="webSocketOpen ? 'Connected to OpenLP' : 'Disconnected'"
|
||||
>
|
||||
<mat-icon *ngIf="webSocketOpen">link</mat-icon>
|
||||
<mat-icon *ngIf="!webSocketOpen">link_off</mat-icon>
|
||||
<button mat-icon-button (click)="menu.toggle()">
|
||||
<mat-icon>menu</mat-icon>
|
||||
</button>
|
||||
<span class="page-title">{{ pageTitle | translate | titlecase }}</span>
|
||||
<span class="spacer"></span>
|
||||
@if (showLogin) {
|
||||
<button
|
||||
mat-button
|
||||
(click)="login()">
|
||||
{{ 'LOGIN' | translate | titlecase }}
|
||||
</button>
|
||||
}
|
||||
@if (webSocketOpen) {
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
matTooltip="{{ 'CONNECTED_TO_OPENLP' | translate | titlecase }}">
|
||||
<mat-icon>link</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@else {
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
matTooltip="{{ 'DISCONNECTED' | translate | titlecase }}">
|
||||
<mat-icon>link_off</mat-icon>
|
||||
</button>
|
||||
}
|
||||
<span class="app-version">v{{appVersion}}</span>
|
||||
</mat-toolbar-row>
|
||||
</mat-toolbar>
|
||||
<mat-sidenav-container>
|
||||
<mat-sidenav #menu mode="over">
|
||||
<mat-nav-list>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/service" routerLinkActive #serviceRoute="routerLinkActive" [activated]="serviceRoute.isActive">
|
||||
<mat-icon>list</mat-icon> Service
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/service"
|
||||
routerLinkActive #serviceRoute="routerLinkActive"
|
||||
[activated]="serviceRoute.isActive">
|
||||
<mat-icon>list</mat-icon> {{ 'SERVICE' | translate | titlecase }}
|
||||
</a>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/slides" routerLinkActive #slidesRoute="routerLinkActive" [activated]="slidesRoute.isActive">
|
||||
<mat-icon>collections</mat-icon> Slides
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/slides"
|
||||
routerLinkActive #slidesRoute="routerLinkActive"
|
||||
[activated]="slidesRoute.isActive">
|
||||
<mat-icon>collections</mat-icon> {{ 'SLIDES' | translate | titlecase }}
|
||||
</a>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/alerts" routerLinkActive #alertsRoute="routerLinkActive" [activated]="alertsRoute.isActive">
|
||||
<mat-icon>error</mat-icon> Alerts
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/alerts"
|
||||
routerLinkActive #alertsRoute="routerLinkActive"
|
||||
[activated]="alertsRoute.isActive">
|
||||
<mat-icon>error</mat-icon> {{ 'ALERTS' | translate | titlecase }}
|
||||
</a>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/search" routerLinkActive #searchRoute="routerLinkActive" [activated]="searchRoute.isActive">
|
||||
<mat-icon>search</mat-icon> Search
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/search"
|
||||
routerLinkActive #searchRoute="routerLinkActive"
|
||||
[activated]="searchRoute.isActive">
|
||||
<mat-icon>search</mat-icon> {{ 'SEARCH' | translate | titlecase }}
|
||||
</a>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/themes" routerLinkActive #themesRoute="routerLinkActive" [activated]="themesRoute.isActive">
|
||||
<mat-icon>image</mat-icon> Themes
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/themes"
|
||||
routerLinkActive #themesRoute="routerLinkActive"
|
||||
[activated]="themesRoute.isActive">
|
||||
<mat-icon>image</mat-icon> {{ 'THEMES' | translate | titlecase }}
|
||||
</a>
|
||||
<mat-divider></mat-divider>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/main">Main View</a>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/stage">Stage View</a>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/chords">Chord View</a>
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/main">
|
||||
{{ 'MAIN_VIEW' | translate | titlecase }}
|
||||
</a>
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/stage">
|
||||
{{ 'STAGE_VIEW' | translate | titlecase }}
|
||||
</a>
|
||||
<a mat-list-item
|
||||
(click)="menu.close()"
|
||||
routerLink="/chords">
|
||||
{{ 'CHORD_VIEW' | translate | titlecase }}
|
||||
</a>
|
||||
<mat-divider></mat-divider>
|
||||
<a mat-list-item (click)="menu.close()" routerLink="/settings" routerLinkActive #settingsRoute="routerLinkActive" [activated]="settingsRoute.isActive">
|
||||
<mat-icon>settings</mat-icon> Settings
|
||||
<a mat-list-item (click)="menu.close()"
|
||||
routerLink="/settings"
|
||||
routerLinkActive #settingsRoute="routerLinkActive"
|
||||
[activated]="settingsRoute.isActive">
|
||||
<mat-icon>settings</mat-icon> {{ 'SETTINGS' | translate | titlecase }}
|
||||
</a>
|
||||
</mat-nav-list>
|
||||
</mat-sidenav>
|
||||
|
@ -52,62 +104,214 @@
|
|||
</main>
|
||||
<!-- These two toolbars are for padding the content so the real toolbars do not block content when scrolled down -->
|
||||
<mat-toolbar class="toolbar-padding"></mat-toolbar>
|
||||
<mat-toolbar *ngIf="fastSwitching" class="toolbar-padding"></mat-toolbar>
|
||||
@if (fastSwitching) {
|
||||
<mat-toolbar class="toolbar-padding"></mat-toolbar>
|
||||
}
|
||||
<footer>
|
||||
<mat-toolbar class="footer">
|
||||
<button mat-icon-button (click)="previousItem()" matTooltip="Previous item" matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="nextItem()" matTooltip="Next item" matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="previousSlide()" matTooltip="Previous slide" matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="nextSlide()" matTooltip="Next slide" matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button #squashedDisplayButton (click)="openDisplayModeSelector()" class="squashed-display-button" matTooltip="Change Display Mode" matTooltipPosition="above">
|
||||
<mat-icon *ngIf="state.blank">videocam_off</mat-icon>
|
||||
<mat-icon *ngIf="state.theme">wallpaper</mat-icon>
|
||||
<mat-icon *ngIf="state.display">desktop_windows</mat-icon>
|
||||
<mat-icon *ngIf="state.live()">videocam</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="blankDisplay()" class="displayButton" [class.active]="state.blank" [disabled]="state.blank" matTooltip="Show black" matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="themeDisplay()" class="displayButton" [class.active]="state.theme" [disabled]="state.theme" matTooltip="Show background" matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="desktopDisplay()" class="displayButton" [class.active]="state.display" [disabled]="state.display" matTooltip="Show Desktop" matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="showDisplay()" class="displayButton" [class.active]="state.display" [disabled]="state.live()" matTooltip="Show Presentation" matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
@if (bigDisplayButtons) {
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="previousItem()"
|
||||
matTooltip="{{ 'PREVIOUS_ITEM' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="nextItem()"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="previousSlide()"
|
||||
matTooltip="{{ 'PREVIOUS_SLIDE' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="nextSlide()"
|
||||
matTooltip="{{ 'NEXT_SLIDE' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
#squashedDisplayButton
|
||||
(click)="openDisplayModeSelector()"
|
||||
class="squashed-display-button"
|
||||
matTooltip="{{ 'CHANGE_DISPLAY_MODE' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
@if (state.blank) {
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
}
|
||||
@else if (state.theme) {
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
}
|
||||
@else if (state.display) {
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
}
|
||||
@else if (state.live()) {
|
||||
<mat-icon>videocam</mat-icon>
|
||||
}
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="blankDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.blank"
|
||||
[disabled]="state.blank"
|
||||
matTooltip="{{ 'SHOW_BLACK' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="themeDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.theme"
|
||||
[disabled]="state.theme"
|
||||
matTooltip="{{ 'SHOW_BACKGROUND' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="desktopDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.display"
|
||||
matTooltip="{{ 'SHOW_DESKTOP' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="showDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.live()"
|
||||
matTooltip="{{ 'SHOW_PRESENTATION' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@else {
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="previousItem()"
|
||||
matTooltip="{{ 'PREVIOUS_ITEM' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="nextItem()"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="previousSlide()"
|
||||
matTooltip="{{ 'PREVIOUS_SLIDE' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="nextSlide()"
|
||||
matTooltip="{{ 'NEXT_SLIDE' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
#squashedDisplayButton
|
||||
(click)="openDisplayModeSelector()"
|
||||
class="squashed-display-button"
|
||||
matTooltip="{{ 'CHANGE_DISPLAY_MODE' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
@if (state.blank) {
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
}
|
||||
@else if (state.theme) {
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
}
|
||||
@else if (state.display) {
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
}
|
||||
@else if (state.live()) {
|
||||
<mat-icon>videocam</mat-icon>
|
||||
}
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="blankDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.blank"
|
||||
[disabled]="state.blank"
|
||||
matTooltip="{{ 'SHOW_BLACK' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="themeDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.theme"
|
||||
[disabled]="state.theme"
|
||||
matTooltip="{{ 'SHOW_BACKGROUND' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="desktopDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.display"
|
||||
matTooltip="{{ 'SHOW_DESKTOP' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="showDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.live()"
|
||||
matTooltip="{{ 'SHOW_PRESENTATION' | translate | titlecase }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
}
|
||||
</mat-toolbar>
|
||||
<nav mat-tab-nav-bar mat-stretch-tabs class="fast-switcher" [tabPanel]="tabPanel" *ngIf="fastSwitching">
|
||||
<a mat-tab-link
|
||||
routerLink="/service"
|
||||
routerLinkActive #serviceRoute="routerLinkActive"
|
||||
[active]="serviceRoute.isActive"><mat-icon>list</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/slides"
|
||||
routerLinkActive #slidesRoute="routerLinkActive"
|
||||
[active]="slidesRoute.isActive"><mat-icon>collections</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/alerts"
|
||||
routerLinkActive #alertsRoute="routerLinkActive"
|
||||
[active]="alertsRoute.isActive"><mat-icon>error</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/search"
|
||||
routerLinkActive #searchRoute="routerLinkActive"
|
||||
[active]="searchRoute.isActive"><mat-icon>search</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/themes"
|
||||
routerLinkActive #themesRoute="routerLinkActive"
|
||||
[active]="themesRoute.isActive"><mat-icon>image</mat-icon></a>
|
||||
</nav>
|
||||
@if (fastSwitching) {
|
||||
<nav
|
||||
mat-tab-nav-bar mat-stretch-tabs
|
||||
class="fast-switcher"
|
||||
[tabPanel]="tabPanel">
|
||||
<a mat-tab-link
|
||||
routerLink="/service"
|
||||
routerLinkActive #serviceRoute="routerLinkActive"
|
||||
[active]="serviceRoute.isActive"><mat-icon>list</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/slides"
|
||||
routerLinkActive #slidesRoute="routerLinkActive"
|
||||
[active]="slidesRoute.isActive"><mat-icon>collections</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/alerts"
|
||||
routerLinkActive #alertsRoute="routerLinkActive"
|
||||
[active]="alertsRoute.isActive"><mat-icon>error</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/search"
|
||||
routerLinkActive #searchRoute="routerLinkActive"
|
||||
[active]="searchRoute.isActive"><mat-icon>search</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/themes"
|
||||
routerLinkActive #themesRoute="routerLinkActive"
|
||||
[active]="themesRoute.isActive"><mat-icon>image</mat-icon></a>
|
||||
</nav>
|
||||
}
|
||||
</footer>
|
||||
</mat-sidenav-content>
|
||||
</mat-sidenav-container>
|
||||
|
|
|
@ -13,7 +13,7 @@ mat-toolbar {
|
|||
top: 0;
|
||||
z-index: 1020;
|
||||
|
||||
/* Fix icon button alignment on some firefox configurations */
|
||||
/* Fix icon button alignment on some Firefox configurations */
|
||||
[mat-icon-button] {
|
||||
line-height: 1;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
describe('AppComponent', () => {
|
||||
it('has a dummy test', () => {
|
||||
expect().nothing();
|
||||
expect(null).toBe(null);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -2,7 +2,9 @@ import { Component, OnInit } from '@angular/core';
|
|||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { MatBottomSheet } from '@angular/material/bottom-sheet';
|
||||
|
||||
import { State, DisplayMode } from './responses';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { State, Display, DisplayMode } from './responses';
|
||||
import { OpenLPService, WebSocketStatus } from './openlp.service';
|
||||
import { WindowRef } from './window-ref.service';
|
||||
import { PageTitleService } from './page-title.service';
|
||||
|
@ -10,14 +12,15 @@ import { LoginComponent } from './components/login/login.component';
|
|||
import { fromEvent } from 'rxjs';
|
||||
import { debounceTime } from 'rxjs/operators';
|
||||
import { DisplayModeSelectorComponent } from './components/display-mode-selector/display-mode-selector.component';
|
||||
import { HotKeysService } from './hotkeys.service';
|
||||
import { Shortcuts, ShortcutsService } from './shortcuts.service';
|
||||
import { ShortcutPipe } from './components/pipes/shortcut.pipe';
|
||||
import { SettingsService } from './settings.service';
|
||||
// import { version } from '../../package.json';
|
||||
import * as supportedBrowsers from '../assets/supportedBrowsers';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.scss']
|
||||
styleUrl: './app.component.scss'
|
||||
})
|
||||
export class AppComponent implements OnInit {
|
||||
// Make DisplayMode enum visible to html code
|
||||
|
@ -29,14 +32,19 @@ export class AppComponent implements OnInit {
|
|||
appVersion = '0.0';
|
||||
webSocketOpen = false;
|
||||
fastSwitching = false;
|
||||
bigDisplayButtons = false;
|
||||
useShortcutsFromOpenlp = false;
|
||||
useLanguageFromOpenlp = false;
|
||||
|
||||
constructor(private translateService: TranslateService, private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService, private dialog: MatDialog, private bottomSheet: MatBottomSheet,
|
||||
private windowRef: WindowRef, private shortcutsService: ShortcutsService, private settingsService: SettingsService) {
|
||||
this.pageTitleService.pageTitleChanged$.subscribe(pageTitle => this.pageTitle = pageTitle);
|
||||
this.openlpService.stateChanged$.subscribe(item => this.state = item);
|
||||
this.openlpService.webSocketStateChanged$.subscribe(status => this.webSocketOpen = status === WebSocketStatus.Open);
|
||||
this.shortcutsService.shortcutsChanged$.subscribe(shortcuts => this.addShortcuts(shortcuts));
|
||||
this.appVersion = this.windowRef.nativeWindow.appVersion || '0.0';
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService,
|
||||
private dialog: MatDialog, private bottomSheet: MatBottomSheet, private windowRef: WindowRef,
|
||||
private hotKeysService: HotKeysService, private settingsService: SettingsService) {
|
||||
pageTitleService.pageTitleChanged$.subscribe(pageTitle => this.pageTitle = pageTitle);
|
||||
openlpService.stateChanged$.subscribe(item => this.state = item);
|
||||
openlpService.webSocketStateChanged$.subscribe(status => this.webSocketOpen = status === WebSocketStatus.Open);
|
||||
this.appVersion = windowRef.nativeWindow.appVersion || '0.0';
|
||||
this.webSocketOpen = openlpService.webSocketStatus === WebSocketStatus.Open;
|
||||
// Try to force websocket reconnection as user is now focused on window and will try to interact soon
|
||||
// Adding a debounce to avoid event flooding
|
||||
|
@ -46,51 +54,80 @@ export class AppComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.openlpService.retrieveSystemInformation().subscribe(res => this.showLogin = res.login_required);
|
||||
this.addHotKeys();
|
||||
if (!(supportedBrowsers.test(navigator.userAgent))) {
|
||||
window.location.replace("/assets/notsupported.html");
|
||||
}
|
||||
this.openlpService.retrieveSystemInformation().subscribe(res => {
|
||||
this.showLogin = res.login_required
|
||||
this.useLanguageFromOpenlp = this.openlpService.assertApiVersionMinimum(2, 5)
|
||||
if (this.useLanguageFromOpenlp) {
|
||||
this.openlpService.getLanguage().subscribe(res => {
|
||||
this.translateService.use(res.language);
|
||||
});
|
||||
} else {
|
||||
this.translateService.use('default');
|
||||
}
|
||||
this.useShortcutsFromOpenlp = this.openlpService.assertApiVersionMinimum(2, 5)
|
||||
this.shortcutsService.getShortcuts(this.useShortcutsFromOpenlp);
|
||||
}
|
||||
);
|
||||
this.fastSwitching = this.settingsService.get('fastSwitching');
|
||||
this.settingsService.onPropertyChanged('fastSwitching').subscribe(value => this.fastSwitching = value);
|
||||
this.bigDisplayButtons = this.settingsService.get('bigDisplayButtons');
|
||||
this.settingsService.onPropertyChanged('bigDisplayButtons').subscribe(value => this.bigDisplayButtons = value);
|
||||
}
|
||||
|
||||
addHotKeys(): void {
|
||||
this.hotKeysService.addShortcut({ keys: 'ArrowUp' }).subscribe(() =>
|
||||
this.previousSlide()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'ArrowDown' }).subscribe(() =>
|
||||
this.nextSlide()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'PageUp' }).subscribe(() =>
|
||||
this.previousSlide()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'PageDown' }).subscribe(() =>
|
||||
this.nextSlide()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'ArrowLeft' }).subscribe(() =>
|
||||
this.previousItem()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'ArrowRight' }).subscribe(() =>
|
||||
this.nextItem()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'Space' }).subscribe(() =>
|
||||
{
|
||||
addShortcuts(shortcuts: Shortcuts): void {
|
||||
const shortcutPipe = new ShortcutPipe();
|
||||
shortcuts.previousSlide.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.previousSlide()
|
||||
)
|
||||
});
|
||||
shortcuts.nextSlide.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.nextSlide()
|
||||
)
|
||||
});
|
||||
shortcuts.previousItem.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.previousItem()
|
||||
)
|
||||
});
|
||||
shortcuts.nextItem.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.nextItem()
|
||||
)
|
||||
});
|
||||
shortcuts.showDisplay.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() => {
|
||||
if (this.state.displayMode !== DisplayMode.Presentation) {
|
||||
this.showDisplay();
|
||||
}
|
||||
}
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 't' }).subscribe(() =>
|
||||
this.state.displayMode === DisplayMode.Theme ? this.showDisplay() : this.themeDisplay()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'code.Period' }).subscribe(() =>
|
||||
this.state.displayMode === DisplayMode.Blank ? this.showDisplay() : this.blankDisplay()
|
||||
);
|
||||
this.hotKeysService.addShortcut({ keys: 'd' }).subscribe(() =>
|
||||
this.state.displayMode === DisplayMode.Desktop ? this.showDisplay() : this.desktopDisplay()
|
||||
);
|
||||
})
|
||||
});
|
||||
shortcuts.themeDisplay.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.state.displayMode === DisplayMode.Theme ? this.showDisplay() : this.themeDisplay()
|
||||
)
|
||||
});
|
||||
shortcuts.blankDisplay.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.state.displayMode === DisplayMode.Blank ? this.showDisplay() : this.blankDisplay()
|
||||
)
|
||||
});
|
||||
shortcuts.desktopDisplay.forEach((key) => {
|
||||
this.shortcutsService.addShortcut({ keys: shortcutPipe.transform(key) }).subscribe(() =>
|
||||
this.state.displayMode === DisplayMode.Desktop ? this.showDisplay() : this.desktopDisplay()
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
openDisplayModeSelector(): void {
|
||||
const selectorRef = this.bottomSheet.open(DisplayModeSelectorComponent, {data: this.state.displayMode});
|
||||
const display = new Display();
|
||||
display.displayMode = this.state.displayMode;
|
||||
display.bigDisplayButtons = this.bigDisplayButtons;
|
||||
const selectorRef = this.bottomSheet.open(DisplayModeSelectorComponent, {data: display});
|
||||
selectorRef.afterDismissed().subscribe(result => {
|
||||
if (result === DisplayMode.Blank) {this.blankDisplay();}
|
||||
else if (result === DisplayMode.Desktop) {this.desktopDisplay();}
|
||||
|
@ -121,15 +158,11 @@ export class AppComponent implements OnInit {
|
|||
}
|
||||
|
||||
nextSlide() {
|
||||
this.openlpService.nextSlide().subscribe(() =>
|
||||
this.hotKeysService.scrollToCurrentItem('slide', 'start')
|
||||
);
|
||||
this.openlpService.nextSlide().subscribe();
|
||||
}
|
||||
|
||||
previousSlide() {
|
||||
this.openlpService.previousSlide().subscribe(() =>
|
||||
this.hotKeysService.scrollToCurrentItem('slide', 'end')
|
||||
);
|
||||
this.openlpService.previousSlide().subscribe();
|
||||
}
|
||||
|
||||
blankDisplay() {
|
||||
|
|
|
@ -3,6 +3,7 @@ import { BrowserModule, Title } from '@angular/platform-browser';
|
|||
import { FormsModule } from '@angular/forms';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { TitleCasePipe } from '@angular/common';
|
||||
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
||||
|
@ -23,9 +24,12 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
|||
import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
|
||||
import { MatSliderModule } from '@angular/material/slider';
|
||||
|
||||
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
|
||||
|
||||
import { AppComponent } from './app.component';
|
||||
import { PageTitleService } from './page-title.service';
|
||||
import { OpenLPService } from './openlp.service';
|
||||
import { TranslationService } from './translation.service';
|
||||
import { WindowRef } from './window-ref.service';
|
||||
import { AppRoutingModule } from './app.routing';
|
||||
import { ServiceComponent } from './components/service/service.component';
|
||||
|
@ -35,9 +39,9 @@ import { SearchOptionsComponent } from './components/search/search-options/searc
|
|||
import { SlidesComponent } from './components/slides/slides.component';
|
||||
import { ChordViewComponent } from './components/chord-view/chord-view.component';
|
||||
import { StageViewComponent } from './components/stage-view/stage-view.component';
|
||||
import { Nl2BrPipe } from './components/stage-view/nl2br.pipe';
|
||||
import { Nl2BrPipe } from './components/pipes/nl2br.pipe';
|
||||
import { MainViewComponent } from './components/main-view/main-view.component';
|
||||
import { ChordProPipe } from './components/chord-view/chordpro.pipe';
|
||||
import { ChordProPipe } from './components/pipes/chordpro.pipe';
|
||||
import { LoginComponent } from './components/login/login.component';
|
||||
import { ThemesComponent } from './components/themes/themes.component';
|
||||
import { SlideListComponent } from './components/slides/slide-list/slide-list.component';
|
||||
|
@ -47,10 +51,10 @@ import { ServiceListComponent } from './components/service/service-list/service-
|
|||
import { ChordViewItemComponent } from './components/chord-view/chord-view-item/chord-view-item.component';
|
||||
import { StageViewItemComponent } from './components/stage-view/stage-view-item/stage-view-item.component';
|
||||
import { DisplayModeSelectorComponent } from './components/display-mode-selector/display-mode-selector.component';
|
||||
import { SentenceCasePipe } from './components/pipes/sentence-case.pipe';
|
||||
import { SettingsComponent } from './components/settings/settings.component';
|
||||
import { StageChordPreviewComponent } from './components/settings/stage-chord-preview/stage-chord-preview.component';
|
||||
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
AppComponent,
|
||||
|
@ -68,6 +72,7 @@ import { StageChordPreviewComponent } from './components/settings/stage-chord-pr
|
|||
AlertComponent,
|
||||
SearchComponent,
|
||||
SearchOptionsComponent,
|
||||
SentenceCasePipe,
|
||||
SlidesComponent,
|
||||
SlideListComponent,
|
||||
SlideItemComponent,
|
||||
|
@ -99,12 +104,21 @@ import { StageChordPreviewComponent } from './components/settings/stage-chord-pr
|
|||
MatToolbarModule,
|
||||
MatTooltipModule,
|
||||
MatBottomSheetModule,
|
||||
MatSliderModule
|
||||
MatSliderModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useClass: TranslationService
|
||||
}
|
||||
})
|
||||
],
|
||||
providers: [
|
||||
PageTitleService,
|
||||
OpenLPService,
|
||||
TranslationService,
|
||||
SentenceCasePipe,
|
||||
Title,
|
||||
TitleCasePipe,
|
||||
WindowRef
|
||||
],
|
||||
bootstrap: [AppComponent]
|
||||
|
|
|
@ -1,7 +1,19 @@
|
|||
<h3>Send an Alert</h3>
|
||||
<h3>{{ 'SEND_AN_ALERT' | translate | sentencecase }}</h3>
|
||||
<form #alertForm="ngForm">
|
||||
<mat-form-field>
|
||||
<input matInput [(ngModel)]="alert" type="text" name="alert" placeholder="Alert" required>
|
||||
<input
|
||||
matInput
|
||||
[(ngModel)]="alert"
|
||||
type="text"
|
||||
name="alert"
|
||||
placeholder="{{ 'ALERT' | translate | titlecase }}"
|
||||
required>
|
||||
</mat-form-field>
|
||||
<button mat-raised-button color="primary" id="sendButton" [disabled]="!alertForm.form.valid" (click)="onSubmit(); alertForm.reset()">Send</button>
|
||||
</form>
|
||||
<button
|
||||
mat-raised-button color="primary"
|
||||
id="sendButton"
|
||||
[disabled]="!alertForm.form.valid"
|
||||
(click)="onSubmit(); alertForm.reset()">
|
||||
{{ 'SEND' | translate | titlecase }}
|
||||
</button>
|
||||
</form>
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { TitleCasePipe } from '@angular/common';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
|
@ -7,20 +9,32 @@ import { OpenLPService } from '../../openlp.service';
|
|||
@Component({
|
||||
selector: 'openlp-alert',
|
||||
templateUrl: './alert.component.html',
|
||||
styleUrls: ['./alert.component.scss'],
|
||||
styleUrl: './alert.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
|
||||
export class AlertComponent {
|
||||
|
||||
public alert: string;
|
||||
public alertMessage: string;
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService,
|
||||
private snackBar: MatSnackBar) {
|
||||
pageTitleService.changePageTitle('Alerts');
|
||||
constructor(
|
||||
private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService,
|
||||
private snackBar: MatSnackBar,
|
||||
private titleCasePipe: TitleCasePipe,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.stream('ALERTS').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
this.translateService.stream('ALERT_SUBMITTED').subscribe(res => {
|
||||
this.alertMessage = this.titleCasePipe.transform(res);
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
this.openlpService.showAlert(this.alert).subscribe(() => this.snackBar.open('Alert submitted', '', {duration: 2000}));
|
||||
this.openlpService.showAlert(this.alert).subscribe(
|
||||
() => this.snackBar.open(this.alertMessage, '', { duration: 2000 })
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div
|
||||
class="slide song"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.first]="!active && slide.first_slide_of_tag"
|
||||
[innerHTML]="chordproFormatted(slide)|chordpro">
|
||||
</div>
|
||||
class="slide song"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.first]="!active && slide.first_slide_of_tag"
|
||||
[innerHTML]="chordproFormatted(slide)|chordpro">
|
||||
</div>
|
||||
|
|
|
@ -1,47 +1,74 @@
|
|||
<div
|
||||
class="overlay"
|
||||
[class.embedded]="embedded"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
>
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
<div class="overlay-content">
|
||||
<div class="tags">
|
||||
<span *ngFor="let tag of tags" [class.active]="tag.active">{{ tag.text }}</span>
|
||||
@for (tag of tags; track tag) {
|
||||
<span [class.active]="tag.active">{{ tag.text }}</span>
|
||||
}
|
||||
</div>
|
||||
<div class="container">
|
||||
<app-chord-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true"
|
||||
*ngIf="currentSlides[activeSlide]?.chords; else elseSlideNoChords"
|
||||
></app-chord-view-item>
|
||||
<ng-template #elseSlideNoChords>
|
||||
<app-stage-view-item [slide]="currentSlides[activeSlide]" [active]="true"></app-stage-view-item>
|
||||
</ng-template>
|
||||
@if (currentSlides[activeSlide]?.chords) {
|
||||
<app-chord-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true">
|
||||
</app-chord-view-item>
|
||||
}
|
||||
@else {
|
||||
<app-stage-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true">
|
||||
</app-stage-view-item>
|
||||
}
|
||||
<div class="nextSlides">
|
||||
<ng-container *ngFor="let slide of nextSlides; trackBy: trackByIndex">
|
||||
<app-chord-view-item [slide]="slide" *ngIf="slide?.chords; else elseNextSlideNoChords"></app-chord-view-item>
|
||||
<ng-template #elseNextSlideNoChords>
|
||||
<app-stage-view-item [slide]="slide"></app-stage-view-item>
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
@for (slide of nextSlides; track trackByIndex) {
|
||||
<ng-container>
|
||||
@if (slide?.chords) {
|
||||
<app-chord-view-item
|
||||
[slide]="slide">
|
||||
</app-chord-view-item>
|
||||
}
|
||||
@else {
|
||||
<app-stage-view-item
|
||||
[slide]="slide">
|
||||
</app-stage-view-item>
|
||||
}
|
||||
</ng-container>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<a class="back-button" mat-mini-fab color="" routerLink="/" [matTooltip]="'Go back to controller'" *ngIf="!embedded">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
@if (!embedded) {
|
||||
<a
|
||||
mat-mini-fab color=""
|
||||
class="back-button"
|
||||
routerLink="/"
|
||||
matTooltip="{{ 'GO_BACK_TO_CONTROLLER' | translate | titlecase }}">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
}
|
||||
<div class="transpose">
|
||||
<button mat-icon-button (click)="transposeDown()">
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="transposeDown()">
|
||||
<mat-icon>keyboard_arrow_down</mat-icon>
|
||||
</button>
|
||||
<span>{{ transposeLevel }}</span>
|
||||
<button mat-icon-button (click)="transposeUp()">
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="transposeUp()">
|
||||
<mat-icon>keyboard_arrow_up</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div class="next-service-item" [matTooltip]="'Next item'" *ngIf="!embedded && activeSlide+1 === currentSlides.length">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
@if (!embedded && activeSlide+1 === currentSlides.length) {
|
||||
<div
|
||||
class="next-service-item"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate | titlecase }}">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
}
|
||||
<div class="time">{{ (openlpService.getIsTwelveHourTime()) ? (time|date:'h:mm a') : (time|date:'HH:mm') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,19 +1,98 @@
|
|||
<mat-action-list>
|
||||
<button mat-list-item (click)="setMode(DisplayMode.Blank)" class="display-button" [disabled]="displayMode === DisplayMode.Blank">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
Show black
|
||||
</button>
|
||||
<button mat-list-item (click)="setMode(DisplayMode.Theme)" class="display-button" [disabled]="displayMode === DisplayMode.Theme">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
Show background
|
||||
</button>
|
||||
<button mat-list-item (click)="setMode(DisplayMode.Desktop)" class="display-button" [disabled]="displayMode === DisplayMode.Desktop">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
Show Desktop
|
||||
</button>
|
||||
<button mat-list-item (click)="setMode(DisplayMode.Presentation)" class="display-button" [disabled]="displayMode === DisplayMode.Presentation">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
Show Presentation
|
||||
</button>
|
||||
</mat-action-list>
|
||||
|
||||
@if (display.bigDisplayButtons) {
|
||||
<mat-grid-list
|
||||
cols="2"
|
||||
rowHeight="2:1">
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-blank"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Blank)"
|
||||
[disabled]="display.displayMode === displayMode.Blank">
|
||||
<mat-icon class="big-icon">videocam_off</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-blank" class="caption">{{ 'SHOW_BLACK' | translate | titlecase }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-theme"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Theme)"
|
||||
[disabled]="display.displayMode === displayMode.Theme">
|
||||
<mat-icon class="big-icon">wallpaper</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-theme" class="caption">{{ 'SHOW_BACKGROUND' | translate | titlecase }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-desktop"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Desktop)"
|
||||
[disabled]="display.displayMode === displayMode.Desktop">
|
||||
<mat-icon class="big-icon">desktop_windows</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-desktop" class="caption">{{ 'SHOW_DESKTOP' | translate | titlecase }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-presentation"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Presentation)"
|
||||
[disabled]="display.displayMode === displayMode.Presentation">
|
||||
<mat-icon class="big-icon">videocam</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-presentation" class="caption">{{ 'SHOW_PRESENTATION' | translate | titlecase }}</div>
|
||||
</mat-grid-tile>
|
||||
</mat-grid-list>
|
||||
}
|
||||
@else {
|
||||
<mat-action-list>
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-blank"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Blank)"
|
||||
[disabled]="display.displayMode === displayMode.Blank">
|
||||
<mat-icon class="small-icon">videocam_off</mat-icon>
|
||||
<span id="caption-blank" class="caption">{{ 'SHOW_BLACK' | translate | titlecase }}</span>
|
||||
</button>
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-theme"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Theme)"
|
||||
[disabled]="display.displayMode === displayMode.Theme">
|
||||
<mat-icon class="small-icon">wallpaper</mat-icon>
|
||||
<span id="caption-theme" class="caption">{{ 'SHOW_BACKGROUND' | translate | titlecase }}</span>
|
||||
</button>
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-desktop"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Desktop)"
|
||||
[disabled]="display.displayMode === displayMode.Desktop">
|
||||
<mat-icon class="small-icon">desktop_windows</mat-icon>
|
||||
<span id="caption-desktop" class="caption">{{ 'SHOW_DESKTOP' | translate | titlecase }}</span>
|
||||
</button>
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-presentation"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Presentation)"
|
||||
[disabled]="display.displayMode === displayMode.Presentation">
|
||||
<mat-icon class="small-icon">videocam</mat-icon>
|
||||
<span id="caption-presentation" class="caption">{{ 'SHOW_PRESENTATION' | translate | titlecase }}</span>
|
||||
</button>
|
||||
</mat-action-list>
|
||||
}
|
||||
|
|
|
@ -1,4 +1,12 @@
|
|||
.mat-icon {
|
||||
vertical-align: text-top;
|
||||
}
|
||||
|
||||
.small-icon {
|
||||
padding-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
div.caption {
|
||||
font-size: 20px;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
|
|
@ -1,22 +1,21 @@
|
|||
import { Component, Inject } from '@angular/core';
|
||||
import { MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA } from '@angular/material/bottom-sheet';
|
||||
import { DisplayMode } from 'src/app/responses';
|
||||
|
||||
import { Display, DisplayMode } from 'src/app/responses';
|
||||
|
||||
@Component({
|
||||
selector: 'openlp-display-mode-sheet',
|
||||
templateUrl: 'display-mode-selector.component.html',
|
||||
styleUrls: ['./display-mode-selector.component.scss']
|
||||
styleUrl: './display-mode-selector.component.scss'
|
||||
})
|
||||
export class DisplayModeSelectorComponent {
|
||||
// Make DisplayMode enum visible to html code
|
||||
DisplayMode = DisplayMode;
|
||||
// Make DisplayMode enum visible in HTML template.
|
||||
displayMode = DisplayMode;
|
||||
|
||||
constructor(private bottomSheetRef: MatBottomSheetRef<DisplayModeSelectorComponent>,
|
||||
@Inject(MAT_BOTTOM_SHEET_DATA) public displayMode: DisplayMode) {}
|
||||
constructor(
|
||||
private bottomSheetRef: MatBottomSheetRef<DisplayModeSelectorComponent>,
|
||||
@Inject(MAT_BOTTOM_SHEET_DATA) public display: Display) {}
|
||||
|
||||
setMode(mode: DisplayMode): void {
|
||||
this.bottomSheetRef.dismiss(mode);
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,31 @@
|
|||
<h1 mat-dialog-title>Login</h1>
|
||||
<h1 mat-dialog-title>{{ 'LOGIN' | translate | titlecase }}</h1>
|
||||
|
||||
<form #loginForm="ngForm">
|
||||
<div mat-dialog-content>
|
||||
<mat-form-field>
|
||||
<input matInput placeholder="Username" [(ngModel)]="username" name="username" required>
|
||||
<input
|
||||
matInput
|
||||
placeholder="{{ 'USER_NAME' | translate | titlecase }}"
|
||||
[(ngModel)]="username"
|
||||
name="username"
|
||||
required>
|
||||
</mat-form-field>
|
||||
<mat-form-field>
|
||||
<input matInput placeholder="password" type="password" [(ngModel)]="password" name="password" required>
|
||||
<input
|
||||
matInput
|
||||
placeholder="{{ 'PASSWORD' | translate | titlecase }}"
|
||||
type="password"
|
||||
[(ngModel)]="password"
|
||||
name="password"
|
||||
required>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div mat-dialog-actions>
|
||||
<button mat-raised-button id="loginButton" color="primary" [disabled]="!loginForm.form.valid" (click)="performLogin()">Login</button>
|
||||
<button mat-raised-button id="loginButton"
|
||||
color="primary"
|
||||
[disabled]="!loginForm.form.valid"
|
||||
(click)="performLogin()">
|
||||
{{ 'LOGIN' | translate | titlecase }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
|
|
|
@ -1,30 +1,43 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { Component } from '@angular/core';
|
||||
import { MatDialogRef } from '@angular/material/dialog';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { TitleCasePipe } from '@angular/common';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
templateUrl: './login.component.html',
|
||||
styleUrls: ['./login.component.scss']
|
||||
styleUrl: './login.component.scss'
|
||||
})
|
||||
export class LoginComponent implements OnInit {
|
||||
export class LoginComponent {
|
||||
username: string;
|
||||
password: string;
|
||||
constructor(private dialogRef: MatDialogRef<LoginComponent>, private openlpService: OpenLPService,
|
||||
private snackBar: MatSnackBar) { }
|
||||
|
||||
ngOnInit() {
|
||||
// Do nothing
|
||||
loginSucceededMessage: string;
|
||||
loginFailedMessage: string;
|
||||
|
||||
constructor(
|
||||
private dialogRef: MatDialogRef<LoginComponent>,
|
||||
private openlpService: OpenLPService,
|
||||
private snackBar: MatSnackBar,
|
||||
private titleCasePipe: TitleCasePipe,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.stream('LOGIN_SUCCEEDED').subscribe(res => {
|
||||
this.loginSucceededMessage = this.titleCasePipe.transform(res);
|
||||
});
|
||||
this.translateService.stream('LOGIN_FAILED').subscribe(res => {
|
||||
this.loginFailedMessage = this.titleCasePipe.transform(res);
|
||||
});
|
||||
}
|
||||
|
||||
performLogin() {
|
||||
this.openlpService.login({username: this.username, password: this.password}).subscribe(
|
||||
result => {
|
||||
this.snackBar.open('Successfully logged in', '', {duration: 2000});
|
||||
this.openlpService.login({ username: this.username, password: this.password }).subscribe({
|
||||
next: result => {
|
||||
this.snackBar.open(this.loginSucceededMessage, '', { duration: 2000 });
|
||||
this.dialogRef.close(result);
|
||||
},
|
||||
() => this.snackBar.open('Login failed', '', {duration: 2000})
|
||||
);
|
||||
error: () => this.snackBar.open(this.loginFailedMessage, '', { duration: 2000 })
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<div class="lower-third">
|
||||
<div class="slide">
|
||||
<div class="slide-item" [style.font-size]="fontSize" [style.font-family]="fontFamily">
|
||||
<div
|
||||
class="slide-item"
|
||||
[style.font-size]="fontSize"
|
||||
[style.font-family]="fontFamily">
|
||||
{{currentSlides[activeSlide]?.text}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -8,7 +8,7 @@ import { ServiceItem, Slide } from '../../responses';
|
|||
@Component({
|
||||
selector: 'app-lower-third',
|
||||
templateUrl: './lower-third.component.html',
|
||||
styleUrls: ['./lower-third.component.scss'],
|
||||
styleUrl: './lower-third.component.scss',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class LowerThirdComponent implements OnInit, OnDestroy {
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<div class="overlay">
|
||||
<img src="{{ img }}">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@ import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|||
export class Nl2BrPipe implements PipeTransform {
|
||||
constructor(private sanitizer: DomSanitizer) { }
|
||||
|
||||
transform(value: string): string|SafeHtml {
|
||||
transform(value: string): string | SafeHtml {
|
||||
if (!value) {
|
||||
return value;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
|
||||
@Pipe({name: 'sentencecase'})
|
||||
export class SentenceCasePipe implements PipeTransform {
|
||||
transform(value: string): string {
|
||||
if (!value) {
|
||||
return value;
|
||||
}
|
||||
if (typeof value !== 'string') {
|
||||
throw Error(`Invalid pipe argument: '${value}' for pipe 'SentenceCasePipe'`);
|
||||
}
|
||||
const sentenceEndMarker: string = '. '
|
||||
return value.split(sentenceEndMarker).map(
|
||||
(sentence) => sentence = sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase()
|
||||
).join(sentenceEndMarker);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
|
||||
@Pipe({name: 'shortcut'})
|
||||
export class ShortcutPipe implements PipeTransform {
|
||||
transform(value: string): string {
|
||||
if (!value) {
|
||||
return value;
|
||||
}
|
||||
if (typeof value !== 'string') {
|
||||
throw Error(`Invalid pipe argument: '${value}' for pipe 'ShortcutPipe'`);
|
||||
}
|
||||
value = value.replace('.', 'code.period');
|
||||
value = value.replace('PgUp', 'pageup');
|
||||
value = value.replace('PgDown', 'pagedown');
|
||||
value = value.replace('Up', 'arrowup');
|
||||
value = value.replace('Down', 'arrowdown');
|
||||
value = value.replace('Left', 'arrowleft');
|
||||
value = value.replace('Right', 'arrowright');
|
||||
value = value.replace(/(Alt|Shift)\+/, '$1.');
|
||||
value = value.replace(/Ctrl\+/, 'control.');
|
||||
return value.toLowerCase();
|
||||
}
|
||||
}
|
|
@ -1,8 +1,16 @@
|
|||
<mat-form-field >
|
||||
<mat-select [(ngModel)]="selectedSearchOption" (selectionChange)="setSearchOption($event)" name="selectedSearchOption" [placeholder]="searchOptionsTitle">
|
||||
<mat-option *ngFor="let option of searchOptions" name="searchOptions" [value]="option">
|
||||
{{option}}
|
||||
</mat-option>
|
||||
<mat-select
|
||||
[(ngModel)]="selectedSearchOption"
|
||||
(selectionChange)="setSearchOption($event)"
|
||||
name="selectedSearchOption"
|
||||
[placeholder]="searchOptionsTitle">
|
||||
@for (option of searchOptions; track option) {
|
||||
<mat-option
|
||||
name="searchOptions"
|
||||
[value]="option">
|
||||
{{ option }}
|
||||
</mat-option>
|
||||
}
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
<br>
|
||||
|
|
|
@ -1,26 +1,33 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { TitleCasePipe } from '@angular/common';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../../openlp.service';
|
||||
|
||||
@Component({
|
||||
selector: 'openlp-search-options',
|
||||
templateUrl: './search-options.component.html',
|
||||
styleUrls: ['./search-options.component.scss'],
|
||||
styleUrl: './search-options.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
export class SearchOptionsComponent {
|
||||
public selectedPlugin: string;
|
||||
public searchOptions: Array<string>;
|
||||
public selectedSearchOption: string;
|
||||
public searchOptionsTitle = '';
|
||||
public searchOptionsTitle: string;
|
||||
|
||||
constructor(private openlpService: OpenLPService) {}
|
||||
constructor(
|
||||
private openlpService: OpenLPService,
|
||||
private titleCasePipe: TitleCasePipe,
|
||||
private translateService: TranslateService) { }
|
||||
|
||||
// Used to display search-options for certain plugins
|
||||
onPluginChange(plugin) {
|
||||
this.selectedPlugin = plugin;
|
||||
if (this.selectedPlugin === 'bibles') {
|
||||
this.searchOptionsTitle = 'Bible version:';
|
||||
this.translateService.stream('BIBLE_VERSION').subscribe(res => {
|
||||
this.searchOptionsTitle = this.titleCasePipe.transform(res) + ':';
|
||||
});
|
||||
this.getSearchOptions();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,18 @@
|
|||
<h3>Search</h3>
|
||||
<h3>{{ 'SEARCH' | translate | titlecase }}</h3>
|
||||
<form #searchForm="ngForm">
|
||||
<mat-form-field>
|
||||
<mat-select [(ngModel)]="selectedPlugin" (selectionChange)="onPluginChange()" name="selectedPlugin" placeholder="Search for:">
|
||||
<mat-option *ngFor="let plugin of searchPlugins" name="searchPlugins" [value]="plugin.key">
|
||||
{{plugin.name}}
|
||||
</mat-option>
|
||||
<mat-select
|
||||
[(ngModel)]="selectedPlugin"
|
||||
(selectionChange)="onPluginChange()"
|
||||
name="selectedPlugin"
|
||||
placeholder="Search for:">
|
||||
@for (plugin of searchPlugins; track plugin.name) {
|
||||
<mat-option
|
||||
name="searchPlugins"
|
||||
[value]="plugin.key">
|
||||
{{ plugin.name }}
|
||||
</mat-option>
|
||||
}
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
|
@ -12,21 +20,53 @@
|
|||
<openlp-search-options></openlp-search-options>
|
||||
</div>
|
||||
<mat-form-field>
|
||||
<input matInput [(ngModel)]="searchText" name="searchText" placeholder="Search Text" required>
|
||||
<input
|
||||
matInput
|
||||
[(ngModel)]="searchText"
|
||||
name="searchText"
|
||||
placeholder="{{ 'SEARCH_TEXT' | translate | titlecase }}"
|
||||
required>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
<button mat-raised-button id="searchButton" color="primary" [disabled]="!searchForm.form.valid" (click)="onSubmit()">Search</button>
|
||||
<button
|
||||
mat-raised-button
|
||||
id="searchButton"
|
||||
color="primary"
|
||||
[disabled]="!searchForm.form.valid"
|
||||
(click)="onSubmit()">
|
||||
{{ 'SEARCH' | translate | titlecase }}
|
||||
</button>
|
||||
</form>
|
||||
<div *ngIf="searchResults">
|
||||
<h3>Search Results:</h3>
|
||||
<div *ngIf="!searchResults.length">
|
||||
No Results matching your search were found...
|
||||
@if (searchResults) {
|
||||
<div>
|
||||
<h3>{{ 'SEARCH_RESULTS' | translate | titlecase }}:</h3>
|
||||
@if (searchResults.length) {
|
||||
<table>
|
||||
@for (item of searchResults; track item) {
|
||||
<tr>
|
||||
<td>{{ item[1] }}</td>
|
||||
<td>
|
||||
<button
|
||||
mat-button color="primary"
|
||||
(click)="addToService(item[0])">
|
||||
{{ 'ADD_TO_SERVICE' | translate | sentencecase }}
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
mat-button color="accent"
|
||||
(click)="sendLive(item[0])">
|
||||
{{ 'SEND_LIVE' | translate | sentencecase }}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
}
|
||||
@else {
|
||||
<div>
|
||||
{{ 'NO_SEARCH_RESULTS' | translate | sentencecase }}...
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<table *ngIf="searchResults.length">
|
||||
<tr *ngFor="let item of searchResults">
|
||||
<td>{{item[1]}}</td>
|
||||
<td><button mat-button color="primary" (click)="addToService(item[0])">Add to Service</button></td>
|
||||
<td><button mat-button color="accent" (click)="sendLive(item[0])">Send Live</button></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
|
@ -8,7 +9,7 @@ import { SearchOptionsComponent } from './search-options/search-options.componen
|
|||
@Component({
|
||||
selector: 'openlp-search',
|
||||
templateUrl: './search.component.html',
|
||||
styleUrls: ['./search.component.scss'],
|
||||
styleUrl: './search.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
export class SearchComponent implements OnInit, AfterViewInit {
|
||||
|
@ -20,9 +21,14 @@ export class SearchComponent implements OnInit, AfterViewInit {
|
|||
public displaySearchOptions = false;
|
||||
@ViewChild(SearchOptionsComponent, {static: false}) searchOptions: SearchOptionsComponent;
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService,
|
||||
private cdr: ChangeDetectorRef) {
|
||||
pageTitleService.changePageTitle('Search');
|
||||
constructor(
|
||||
private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService,
|
||||
private cdr: ChangeDetectorRef,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.stream('SEARCH').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<mat-card (click)="onItemSelected(item)" class="service-item no-select" [class.selected]="selected">
|
||||
<mat-card
|
||||
(click)="onItemSelected(item)"
|
||||
class="service-item no-select"
|
||||
[class.selected]="selected">
|
||||
<mat-card-content>
|
||||
<mat-icon>{{ getIcon(item) }}</mat-icon> {{ item.title }}
|
||||
</mat-card-content>
|
||||
|
|
|
@ -5,7 +5,7 @@ import { ServiceItem } from '../../../responses';
|
|||
@Component({
|
||||
selector: 'openlp-service-item',
|
||||
templateUrl: './service-item.component.html',
|
||||
styleUrls: ['./service-item.component.scss'],
|
||||
styleUrl: './service-item.component.scss',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush
|
||||
})
|
||||
|
||||
|
|
|
@ -1,23 +1,29 @@
|
|||
<ng-container *ngIf="items?.length; else noServiceItems">
|
||||
<openlp-service-item
|
||||
*ngFor="let item of items"
|
||||
[item]="item"
|
||||
[selected]="item.selected"
|
||||
(selectItem)="onItemSelected($event)"
|
||||
[tabindex]="item.id"
|
||||
></openlp-service-item>
|
||||
</ng-container>
|
||||
<ng-template #noServiceItems>
|
||||
<div class="no-items" *ngIf="!loading">
|
||||
@if (items?.length) {
|
||||
<ng-container>
|
||||
@for (item of items; track item) {
|
||||
<openlp-service-item
|
||||
[item]="item"
|
||||
[selected]="item.selected"
|
||||
(selectItem)="onItemSelected($event)"
|
||||
[tabindex]="item.id">
|
||||
</openlp-service-item>
|
||||
}
|
||||
</ng-container>
|
||||
}
|
||||
@else if (!loading) {
|
||||
<div class="no-items">
|
||||
<div class="no-items-title">
|
||||
<span class="material-icons icon">info</span>
|
||||
No service items.
|
||||
{{ 'NO_SERVICE_ITEMS' | translate | sentencecase }}.
|
||||
</div>
|
||||
<div class="no-items-actions">
|
||||
<a routerLink="/search" mat-stroked-button color="primary" size="small">
|
||||
<a
|
||||
routerLink="/search"
|
||||
mat-stroked-button color="primary"
|
||||
size="small">
|
||||
<span class="material-icons">add</span>
|
||||
Add Item
|
||||
{{ 'ADD_ITEM' | translate | sentencecase }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import { ServiceItem } from '../../../responses';
|
|||
@Component({
|
||||
selector: 'openlp-service-list',
|
||||
templateUrl: './service-list.component.html',
|
||||
styleUrls: ['./service-list.component.scss', '../../no-items.scss'],
|
||||
styleUrls: ['./service-list.component.scss', '../../no-items.scss']
|
||||
})
|
||||
|
||||
export class ServiceListComponent implements OnInit, OnDestroy {
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
<openlp-service-list (itemSelected)="this.onItemSelected($event)"></openlp-service-list>
|
||||
<openlp-service-list
|
||||
(itemSelected)="this.onItemSelected($event)">
|
||||
</openlp-service-list>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
|
@ -8,7 +9,7 @@ import { ServiceItem } from '../../responses';
|
|||
@Component({
|
||||
selector: 'openlp-service',
|
||||
templateUrl: './service.component.html',
|
||||
styleUrls: ['./service.component.scss'],
|
||||
styleUrl: './service.component.scss',
|
||||
})
|
||||
|
||||
export class ServiceComponent {
|
||||
|
@ -19,8 +20,13 @@ export class ServiceComponent {
|
|||
}
|
||||
}
|
||||
|
||||
constructor(protected pageTitleService: PageTitleService, protected openlpService: OpenLPService,
|
||||
protected router: Router) {
|
||||
pageTitleService.changePageTitle('Service');
|
||||
constructor(
|
||||
protected pageTitleService: PageTitleService,
|
||||
protected openlpService: OpenLPService,
|
||||
protected router: Router,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.stream('SERVICE').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,59 +1,70 @@
|
|||
<div class="settings-panel">
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
User Interface
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.fastSwitching"
|
||||
(change)="setSetting('fastSwitching', $event.checked)"
|
||||
>
|
||||
Enable Fast Switching panel
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
{{ 'USER_INTERFACE' | translate | titlecase }}
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.fastSwitching"
|
||||
(change)="setSetting('fastSwitching', $event.checked)">
|
||||
{{ 'ENABLE_FAST_SWITCHING_PANEL' | translate | sentencecase }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.bigDisplayButtons"
|
||||
(change)="setSetting('bigDisplayButtons', $event.checked)">
|
||||
{{ 'ENABLE_BIG_DISPLAY_BUTTONS' | translate | sentencecase }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
Stage and Chords Appearance
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-tab-group>
|
||||
<mat-tab label="Stage">
|
||||
<ng-template matTabContent>
|
||||
<ng-container>
|
||||
<openlp-stage-chord-preview stageType="stage"></openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'stage'}"></ng-container>
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
<mat-tab label="Chords">
|
||||
<ng-template matTabContent>
|
||||
<openlp-stage-chord-preview stageType="chords"></openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'chords'}"></ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
</mat-card-content>
|
||||
<mat-card-header>
|
||||
{{ 'STAGE_AND_CHORDS_APPEARANCE' | translate | sentencecase }}
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-tab-group>
|
||||
<mat-tab label="{{ 'STAGE' | translate | titlecase }}">
|
||||
<ng-template matTabContent>
|
||||
<ng-container>
|
||||
<openlp-stage-chord-preview stageType="stage">
|
||||
</openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'stage'}">
|
||||
</ng-container>
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
<mat-tab label="{{ 'CHORDS' | translate | titlecase }}">
|
||||
<ng-template matTabContent>
|
||||
<openlp-stage-chord-preview stageType="chords">
|
||||
</openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'chords'}">
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
<ng-template #stageSettings let-prefix="prefix">
|
||||
<div class="stage-settings">
|
||||
<div class="settings-item">
|
||||
<label>Font Scale: {{settings[prefix + 'FontScale'] ?? 100}}%</label>
|
||||
<mat-slider
|
||||
min="25"
|
||||
max="200"
|
||||
step="6.25"
|
||||
>
|
||||
<input
|
||||
matSliderThumb
|
||||
[value]="settings[prefix + 'FontScale']"
|
||||
(valueChange)="setSetting(prefix + 'FontScale', $event)"
|
||||
>
|
||||
</mat-slider>
|
||||
</div>
|
||||
<ng-template
|
||||
#stageSettings
|
||||
let-prefix="prefix">
|
||||
<div class="stage-settings">
|
||||
<div class="settings-item">
|
||||
<label>{{ 'FONT_SCALE' | translate | sentencecase }}: {{settings[prefix + 'FontScale'] ?? 100}}%</label>
|
||||
<mat-slider
|
||||
min="25"
|
||||
max="200"
|
||||
step="6.25">
|
||||
<input
|
||||
matSliderThumb
|
||||
[value]="settings[prefix + 'FontScale']"
|
||||
(valueChange)="setSetting(prefix + 'FontScale', $event)">
|
||||
</mat-slider>
|
||||
</div>
|
||||
</ng-template>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { Component, OnDestroy } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
|
@ -6,17 +7,19 @@ import { SettingsProperties, SettingsPropertiesItem, SettingsService } from '../
|
|||
|
||||
@Component({
|
||||
selector: 'openlp-settings',
|
||||
templateUrl: `./settings.component.html`,
|
||||
styleUrls: [`./settings.component.scss`]
|
||||
templateUrl: './settings.component.html',
|
||||
styleUrl: './settings.component.scss'
|
||||
})
|
||||
export class SettingsComponent implements OnDestroy {
|
||||
constructor(
|
||||
protected pageTitleService: PageTitleService,
|
||||
protected openlpService: OpenLPService,
|
||||
protected settingsService: SettingsService,
|
||||
) {
|
||||
private translateService: TranslateService) {
|
||||
this.settingsSubscription$ = settingsService.settingChanged$.subscribe(this._settingChanged);
|
||||
pageTitleService.changePageTitle('Settings');
|
||||
this.translateService.stream('SETTINGS').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
protected settingsSubscription$: Subscription;
|
||||
|
@ -36,5 +39,4 @@ export class SettingsComponent implements OnDestroy {
|
|||
ngOnDestroy(): void {
|
||||
this.settingsSubscription$.unsubscribe();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
<div class="stage-preview-container" #stageViewContainer>
|
||||
<div
|
||||
class="stage-preview-container"
|
||||
#stageViewContainer>
|
||||
@if (stageType === 'stage') {
|
||||
<app-stage-view
|
||||
#stageView
|
||||
*ngIf="stageType === 'stage'"
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
></app-stage-view>
|
||||
#stageView
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
</app-stage-view>
|
||||
}
|
||||
@else if (stageType === 'chords') {
|
||||
<app-chord-view
|
||||
#chordsView
|
||||
*ngIf="stageType === 'chords'"
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
></app-chord-view>
|
||||
</div>
|
||||
#chordsView
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
</app-chord-view>
|
||||
}
|
||||
</div>
|
||||
|
|
|
@ -17,7 +17,7 @@ import { SettingsProperties, SettingsService } from 'src/app/settings.service';
|
|||
@Component({
|
||||
selector: 'openlp-stage-chord-preview',
|
||||
templateUrl: './stage-chord-preview.component.html',
|
||||
styleUrls: ['./stage-chord-preview.component.scss'],
|
||||
styleUrl: './stage-chord-preview.component.scss',
|
||||
})
|
||||
export class StageChordPreviewComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {
|
||||
constructor(
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
<mat-card class="slide no-select" mat-list-item (click)="onSlideSelected(slide)" [class.selected]="selected">
|
||||
<mat-card
|
||||
class="slide no-select"
|
||||
mat-list-item
|
||||
(click)="onSlideSelected(slide)"
|
||||
[class.selected]="selected">
|
||||
<mat-card-content>
|
||||
<div class="verse-tag">{{ slide?.tag }}</div>
|
||||
<div *ngIf="slide?.img; else onlySlideText" class="verse-img-container">
|
||||
<img src="{{ slide?.img }}" />
|
||||
<div class="img-verse-text">
|
||||
{{ slide?.text }}
|
||||
@if (slide?.img) {
|
||||
<div class="verse-img-container">
|
||||
<img src="{{ slide?.img }}" />
|
||||
<div class="img-verse-text">
|
||||
{{ slide?.text }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ng-template #onlySlideText>
|
||||
}
|
||||
@else {
|
||||
<div class="verse-text">{{ slide?.text }}</div>
|
||||
</ng-template>
|
||||
}
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import { Slide } from '../../../responses';
|
|||
@Component({
|
||||
selector: 'openlp-slide-item',
|
||||
templateUrl: './slide-item.component.html',
|
||||
styleUrls: ['./slide-item.component.scss'],
|
||||
styleUrl: './slide-item.component.scss',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush
|
||||
})
|
||||
|
||||
|
|
|
@ -1,23 +1,32 @@
|
|||
<ng-container *ngIf="slides?.length; else noSlideItems">
|
||||
<openlp-slide-item
|
||||
*ngFor="let slide of slides; let index = index"
|
||||
[slide]="slide"
|
||||
[tabindex]="counter"
|
||||
[selected]="slide.selected"
|
||||
(selectSlide)="onSlideSelected($event, index)"
|
||||
></openlp-slide-item>
|
||||
</ng-container>
|
||||
<ng-template #noSlideItems>
|
||||
<div class="no-items" *ngIf="!loading">
|
||||
<div class="no-items-title">
|
||||
<span class="material-icons icon">info</span>
|
||||
No slide items.
|
||||
@if (slides?.length) {
|
||||
<ng-container>
|
||||
@for (slide of slides; track slide; let index = $index) {
|
||||
<openlp-slide-item
|
||||
[slide]="slide"
|
||||
[tabindex]="index"
|
||||
[selected]="slide.selected"
|
||||
(selectSlide)="onSlideSelected($event, index)">
|
||||
</openlp-slide-item>
|
||||
}
|
||||
</ng-container>
|
||||
}
|
||||
@else {
|
||||
@if (!loading) {
|
||||
<div class="no-items">
|
||||
<div class="no-items-title">
|
||||
<span class="material-icons icon">info</span>
|
||||
{{ 'NO_SLIDE_ITEMS' | translate | sentencecase }}.
|
||||
</div>
|
||||
<div class="no-items-actions">
|
||||
<a
|
||||
routerLink="/search"
|
||||
mat-stroked-button
|
||||
color="primary"
|
||||
size="small">
|
||||
<span class="material-icons">add</span>
|
||||
{{ 'ADD_ITEM_TO_SERVICE' | translate | sentencecase }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="no-items-actions">
|
||||
<a routerLink="/search" mat-stroked-button color="primary" size="small">
|
||||
<span class="material-icons">add</span>
|
||||
Add Item to Service
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ import { Subscription } from 'rxjs';
|
|||
|
||||
import { Slide } from '../../../responses';
|
||||
import { OpenLPService } from '../../../openlp.service';
|
||||
import { HotKeysService } from '../../../hotkeys.service';
|
||||
|
||||
@Component({
|
||||
selector: 'openlp-slide-list',
|
||||
|
@ -16,10 +15,8 @@ export class SlideListComponent implements OnInit, OnDestroy {
|
|||
@Output() slideSelected = new EventEmitter<SlideListItem>();
|
||||
_subscription: Subscription;
|
||||
loading = false;
|
||||
previousServiceItemId: string;
|
||||
isServiceItemChanged: boolean;
|
||||
|
||||
constructor(private openlpService: OpenLPService, private hotKeysService: HotKeysService) {
|
||||
constructor(private openlpService: OpenLPService) {
|
||||
this._subscription = openlpService.stateChanged$.subscribe(() =>
|
||||
this.fetchSlides()
|
||||
);
|
||||
|
@ -44,27 +41,25 @@ export class SlideListComponent implements OnInit, OnDestroy {
|
|||
this.loading = false;
|
||||
if (serviceItem instanceof Array) {
|
||||
this.slides = serviceItem;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this.slides = serviceItem.slides;
|
||||
if (this.previousServiceItemId !== serviceItem.id) {
|
||||
this.isServiceItemChanged = true;
|
||||
this.previousServiceItemId = serviceItem.id;
|
||||
}
|
||||
}
|
||||
},
|
||||
complete: () => {
|
||||
if (this.isServiceItemChanged) {
|
||||
setTimeout(() => this.hotKeysService.scrollToCurrentItem('slide', window.scrollY === 0 ? 'center' : 'end'), 25);
|
||||
this.isServiceItemChanged = false;
|
||||
}
|
||||
setTimeout(() => this.scrollToCurrentItem(), 25);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
scrollToCurrentItem() {
|
||||
document.querySelectorAll('openlp-slide-item .selected')[0]?.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'center'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export interface SlideListItem {
|
||||
slide: Slide;
|
||||
index: number;
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
<openlp-slide-list (slideSelected)="onSlideSelected($event)"></openlp-slide-list>
|
||||
<openlp-slide-list (slideSelected)="onSlideSelected($event)">
|
||||
</openlp-slide-list>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
|
@ -7,12 +8,17 @@ import { SlideListItem } from './slide-list/slide-list.component';
|
|||
@Component({
|
||||
selector: 'openlp-slides',
|
||||
templateUrl: './slides.component.html',
|
||||
styleUrls: ['./slides.component.scss'],
|
||||
styleUrl: './slides.component.scss',
|
||||
})
|
||||
|
||||
export class SlidesComponent {
|
||||
constructor(protected pageTitleService: PageTitleService, protected openlpService: OpenLPService) {
|
||||
pageTitleService.changePageTitle('Slides');
|
||||
constructor(
|
||||
protected pageTitleService: PageTitleService,
|
||||
protected openlpService: OpenLPService,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.stream('SLIDES').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
onSlideSelected(item: SlideListItem) {
|
||||
|
|
|
@ -1,15 +1,21 @@
|
|||
<div
|
||||
class="slide"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-4]="!active"
|
||||
[class.first]="!active && slide.first_slide_of_tag"
|
||||
>
|
||||
<ng-container *ngIf="!(slide?.img); else elseImage">
|
||||
{{slide?.text}}
|
||||
class="slide"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-4]="!active"
|
||||
[class.first]="!active && slide.first_slide_of_tag">
|
||||
@if (slide?.img) {
|
||||
<img
|
||||
src="{{slide?.img}}"
|
||||
[class.active-slide-img]="active"
|
||||
[class.next-slides-img]="!active"/>
|
||||
<div
|
||||
[class.active-slide-img-text]="active"
|
||||
[class.next-slides-text]="!active">{{ slide?.text }}</div>
|
||||
}
|
||||
@else {
|
||||
<ng-container>
|
||||
{{ slide?.text }}
|
||||
</ng-container>
|
||||
<ng-template #elseImage>
|
||||
<img src="{{slide?.img}}" [class.active-slide-img]="active" [class.next-slides-img]="!active"/>
|
||||
<div [class.active-slide-img-text]="active" [class.next-slides-text]="!active">{{ slide?.text }}</div>
|
||||
</ng-template>
|
||||
}
|
||||
</div>
|
||||
|
|
|
@ -1,39 +1,70 @@
|
|||
<div
|
||||
class="overlay"
|
||||
[class.embedded]="embedded"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
>
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
<div class="overlay-content">
|
||||
<div class="tags">
|
||||
<span *ngFor="let tag of tags" [class.active]="tag.active">{{ tag.text }}</span>
|
||||
@for (tag of tags; track tag) {
|
||||
<span [class.active]="tag.active">{{ tag.text }}</span>
|
||||
}
|
||||
</div>
|
||||
<div class="container">
|
||||
<app-stage-view-item [slide]="currentSlides[activeSlide]" [active]="true"></app-stage-view-item>
|
||||
<app-stage-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true">
|
||||
</app-stage-view-item>
|
||||
<div class="nextSlides">
|
||||
<app-stage-view-item [slide]="slide" *ngFor="let slide of nextSlides; trackBy: trackByIndex"></app-stage-view-item>
|
||||
@for (slide of nextSlides; track trackByIndex) {
|
||||
<app-stage-view-item [slide]="slide">
|
||||
</app-stage-view-item>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<a class="back-button" mat-mini-fab color="" routerLink="/" [matTooltip]="'Go back to controller'" *ngIf="!embedded">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
<button
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
[matTooltip]="'Show/hide notes'"
|
||||
[color]="showNotes ? 'primary' : ''"
|
||||
[class.show-notes-disabled]="!showNotes"
|
||||
(click)="showNotes = !showNotes"
|
||||
>
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
<div class="next-service-item" [matTooltip]="'Next item'" *ngIf="!embedded && activeSlide+1 === currentSlides.length">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
@if (!embedded) {
|
||||
<a
|
||||
class="back-button"
|
||||
mat-mini-fab color=""
|
||||
routerLink="/"
|
||||
matTooltip="{{ 'GO_BACK_TO_CONTROLLER' | translate | titlecase }}">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
}
|
||||
@if (showNotes) {
|
||||
<button
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
matTooltip="{{ 'HIDE_NOTES' | translate | titlecase }}"
|
||||
color="primary"
|
||||
[class.show-notes-disabled]="false"
|
||||
(click)="showNotes = false">
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@else {
|
||||
<button
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
matTooltip="{{ 'SHOW_NOTES' | translate | titlecase }}"
|
||||
color=""
|
||||
[class.show-notes-disabled]="true"
|
||||
(click)="showNotes = true">
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@if (!embedded && activeSlide+1 === currentSlides.length) {
|
||||
<div
|
||||
class="next-service-item"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate | titlecase }}">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
}
|
||||
<div class="time">{{ (openlpService.getIsTwelveHourTime()) ? (time|date:'h:mm a') : (time|date:'HH:mm') }}</div>
|
||||
</div>
|
||||
<div class="sidebar" *ngIf="(showNotes || embedded) && notes">
|
||||
<div class="notes" [innerHTML]="notes|nl2br"></div>
|
||||
</div>
|
||||
@if ((showNotes || embedded) && notes) {
|
||||
<div class="sidebar">
|
||||
<div class="notes" [innerHTML]="notes|nl2br"></div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
|
|
@ -97,7 +97,7 @@ export class StageViewComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
setNewSlides(slides: Slide[], _currentSlide: number): void { /* eslint-disable-line @typescript-eslint/no-unused-vars */
|
||||
if (slides.length === 0) {
|
||||
if ((slides?.length ?? 0) === 0) {
|
||||
return;
|
||||
}
|
||||
this.currentSlides = slides;
|
||||
|
|
|
@ -1,26 +1,35 @@
|
|||
<form #themeForm="ngForm">
|
||||
<h4>Theme Options</h4>
|
||||
<h4>{{ 'THEME_OPTIONS' | translate | titlecase }}</h4>
|
||||
<div>
|
||||
<!-- Theme level menu -->
|
||||
<mat-form-field>
|
||||
<mat-label>Theme level</mat-label>
|
||||
<mat-label>{{ 'THEME_LEVEL' | translate | titlecase }}</mat-label>
|
||||
<mat-select [(value)]="themeLevel">
|
||||
<mat-option value="global">Global</mat-option>
|
||||
<mat-option value="service">Service</mat-option>
|
||||
<mat-option value="song">Song</mat-option>
|
||||
<mat-option value="global">{{ 'GLOBAL' | translate | titlecase }}</mat-option>
|
||||
<mat-option value="service">{{ 'SERVICE' | translate | titlecase }}</mat-option>
|
||||
<mat-option value="song">{{ 'SONG' | translate | titlecase }}</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<!-- Themes display -->
|
||||
<div class="theme-container content" *ngIf="isThemeLevelSupported()">
|
||||
<div *ngFor="let theme of themeList;">
|
||||
<mat-card class="theme-card" (click)='setTheme(theme.name)' [class.selected]="theme.selected">
|
||||
<mat-card-content>
|
||||
<img [src]="theme.thumbnail"/>
|
||||
<div class="theme-title">{{ theme.name }}</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
@if (isThemeLevelSupported()) {
|
||||
<div class="theme-container content">
|
||||
@for (theme of themeList; track theme) {
|
||||
<div>
|
||||
<mat-card
|
||||
class="theme-card"
|
||||
(click)='setTheme(theme.name)'
|
||||
[class.selected]="theme.selected">
|
||||
<mat-card-content>
|
||||
<img [src]="theme.thumbnail"/>
|
||||
<div class="theme-title">{{ theme.name }}</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<mat-error *ngIf="!isThemeLevelSupported()">Song level theme changing not supported. Change your theme level to Global or Service</mat-error>
|
||||
</form>
|
||||
}
|
||||
@else {
|
||||
<mat-error>
|
||||
{{ 'SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED' | translate | sentencecase }}
|
||||
</mat-error>
|
||||
}
|
||||
</form>
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
import { Theme } from '../../responses';
|
||||
|
||||
@Component({
|
||||
selector: 'openlp-themes',
|
||||
templateUrl: './themes.component.html',
|
||||
styleUrls: ['./themes.component.scss'],
|
||||
styleUrl: './themes.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
export class ThemesComponent implements OnInit {
|
||||
|
@ -13,8 +16,13 @@ export class ThemesComponent implements OnInit {
|
|||
private _themeList = [];
|
||||
private _themeLevel = null;
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService) {
|
||||
pageTitleService.changePageTitle('Themes');
|
||||
constructor(
|
||||
private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.stream('THEMES').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
@ -22,7 +30,7 @@ export class ThemesComponent implements OnInit {
|
|||
this.getThemes();
|
||||
}
|
||||
|
||||
get themeList(): Array<string> {
|
||||
get themeList(): Array<Theme> {
|
||||
return this._themeList;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,52 +0,0 @@
|
|||
import { DOCUMENT } from '@angular/common';
|
||||
import { Inject, Injectable } from '@angular/core';
|
||||
import { EventManager } from '@angular/platform-browser';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
interface Options {
|
||||
element: any;
|
||||
keys: string;
|
||||
}
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class HotKeysService {
|
||||
defaults: Partial<Options> = {
|
||||
element: this.document
|
||||
};
|
||||
|
||||
constructor(private eventManager: EventManager, @Inject(DOCUMENT) private document: Document) {
|
||||
}
|
||||
|
||||
addShortcut(options: Partial<Options>) {
|
||||
const merged = { ...this.defaults, ...options };
|
||||
const event = `keydown.${merged.keys}`;
|
||||
|
||||
return new Observable(observer => {
|
||||
const handler = (e: KeyboardEvent) => {
|
||||
const activeElement = this.document.activeElement;
|
||||
const notOnInput = activeElement?.tagName !== 'INPUT' && activeElement?.tagName !== 'TEXTAREA';
|
||||
if (notOnInput) {
|
||||
if (document.URL.endsWith('/slides')) {
|
||||
e.preventDefault();
|
||||
observer.next(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const dispose = this.eventManager.addEventListener(
|
||||
merged.element, event, handler
|
||||
);
|
||||
|
||||
return () => {
|
||||
dispose();
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
scrollToCurrentItem(type: 'slide'|'service', block: 'start'|'center'|'end'|'nearest') {
|
||||
document.querySelectorAll(`openlp-${type}-item .selected`)[0]?.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block
|
||||
});
|
||||
}
|
||||
}
|
|
@ -9,7 +9,9 @@ import {
|
|||
Slide,
|
||||
ServiceItem,
|
||||
Theme,
|
||||
Language,
|
||||
MainView,
|
||||
Shortcut,
|
||||
SystemInformation,
|
||||
Credentials,
|
||||
AuthToken,
|
||||
|
@ -92,10 +94,18 @@ export class OpenLPService {
|
|||
}));
|
||||
}
|
||||
|
||||
getLanguage(): Observable<Language> {
|
||||
return this.doGet(`${this.apiURL}/core/language`);
|
||||
}
|
||||
|
||||
getMainImage(): Observable<MainView> {
|
||||
return this.doGet<MainView>(`${this.apiURL}/core/live-image`);
|
||||
}
|
||||
|
||||
getShortcuts(): Observable<Shortcut[]> {
|
||||
return this.doGet(`${this.apiURL}/core/shortcuts`);
|
||||
}
|
||||
|
||||
getSearchablePlugins(): Observable<PluginDescription[]> {
|
||||
return this.doGet<PluginDescription[]>(`${this.apiURL}/core/plugins`);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { TitleCasePipe } from '@angular/common';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
@Injectable()
|
||||
|
@ -7,10 +8,12 @@ export class PageTitleService {
|
|||
private pageTitleSource = new Subject<string>();
|
||||
public pageTitleChanged$ = this.pageTitleSource.asObservable();
|
||||
|
||||
constructor(private titleService: Title) {}
|
||||
constructor(
|
||||
private titleService: Title,
|
||||
private titleCasePipe: TitleCasePipe) {}
|
||||
|
||||
changePageTitle(pageTitle: string) {
|
||||
this.pageTitleSource.next(pageTitle);
|
||||
this.titleService.setTitle(pageTitle + ' | OpenLP Remote');
|
||||
this.titleService.setTitle(this.titleCasePipe.transform(pageTitle) + ' | OpenLP Remote');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,11 @@ export class State {
|
|||
}
|
||||
}
|
||||
|
||||
export class Display {
|
||||
displayMode: DisplayMode;
|
||||
bigDisplayButtons: boolean;
|
||||
}
|
||||
|
||||
export enum DisplayMode {
|
||||
Blank,
|
||||
Theme,
|
||||
|
@ -58,14 +63,24 @@ export interface ServiceItem {
|
|||
}
|
||||
|
||||
export interface Theme {
|
||||
selected: boolean;
|
||||
name: string;
|
||||
selected: boolean;
|
||||
thumbnail: object;
|
||||
}
|
||||
|
||||
export interface Language {
|
||||
language: string;
|
||||
}
|
||||
|
||||
export interface MainView {
|
||||
binary_image: string;
|
||||
}
|
||||
|
||||
export interface Shortcut {
|
||||
action: string;
|
||||
shortcut: string[];
|
||||
}
|
||||
|
||||
export interface SystemInformation {
|
||||
websocket_port: number;
|
||||
login_required: boolean;
|
||||
|
|
|
@ -5,6 +5,7 @@ export class SettingsProperties {
|
|||
fastSwitching = false;
|
||||
stageFontScale = 100;
|
||||
chordsFontScale = 100;
|
||||
bigDisplayButtons = false;
|
||||
}
|
||||
|
||||
export interface SettingsPropertiesItem<SP extends keyof SettingsProperties, SV = SettingsProperties[SP]> {
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
import { DOCUMENT } from '@angular/common';
|
||||
import { EventEmitter, Inject, Injectable } from '@angular/core';
|
||||
import { EventManager } from '@angular/platform-browser';
|
||||
import { Observable } from 'rxjs';
|
||||
import { OpenLPService } from './openlp.service';
|
||||
|
||||
export class Shortcuts {
|
||||
previousSlide = ['Up', 'PgUp'];
|
||||
nextSlide = ['Down', 'PgDown'];
|
||||
previousItem = ['Left'];
|
||||
nextItem = ['Right'];
|
||||
showDisplay = ['Space'];
|
||||
themeDisplay = ['t'];
|
||||
blankDisplay = ['.'];
|
||||
desktopDisplay = ['d'];
|
||||
}
|
||||
|
||||
interface Options {
|
||||
element: any;
|
||||
keys: string;
|
||||
}
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ShortcutsService {
|
||||
defaults: Partial<Options> = {
|
||||
element: this.document
|
||||
};
|
||||
|
||||
constructor(
|
||||
@Inject(DOCUMENT) private document: Document,
|
||||
private eventManager: EventManager,
|
||||
private openlpService: OpenLPService) {
|
||||
this.shortcutsChanged$ = new EventEmitter<Shortcuts>();
|
||||
}
|
||||
|
||||
private shortcuts: Shortcuts
|
||||
public shortcutsChanged$: EventEmitter<Shortcuts>;
|
||||
|
||||
getShortcuts(useShortcutsFromOpenlp: boolean) {
|
||||
const shortcuts: Shortcuts = new Shortcuts()
|
||||
if (useShortcutsFromOpenlp) {
|
||||
this.openlpService.getShortcuts().subscribe(res => {
|
||||
res.forEach((shortcut) => {
|
||||
switch (shortcut.action) {
|
||||
case 'blankScreen':
|
||||
shortcuts.blankDisplay = shortcut.shortcut;
|
||||
break;
|
||||
case 'desktopScreen':
|
||||
shortcuts.desktopDisplay = shortcut.shortcut;
|
||||
break;
|
||||
case 'nextItem_live':
|
||||
shortcuts.nextSlide = shortcut.shortcut;
|
||||
break;
|
||||
case 'nextService':
|
||||
shortcuts.nextItem = shortcut.shortcut;
|
||||
break;
|
||||
case 'previousItem_live':
|
||||
shortcuts.previousSlide = shortcut.shortcut;
|
||||
break;
|
||||
case 'previousService':
|
||||
shortcuts.previousItem = shortcut.shortcut;
|
||||
break;
|
||||
case 'showScreen':
|
||||
shortcuts.showDisplay = shortcut.shortcut;
|
||||
break;
|
||||
case 'themeScreen':
|
||||
shortcuts.themeDisplay = shortcut.shortcut;
|
||||
break;
|
||||
}
|
||||
})
|
||||
this._handleShortcutsChanged(shortcuts);
|
||||
})
|
||||
} else {
|
||||
this._handleShortcutsChanged(shortcuts);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
addShortcut(options: Partial<Options>) {
|
||||
const merged = { ...this.defaults, ...options };
|
||||
const event = `keydown.${merged.keys}`;
|
||||
|
||||
return new Observable(observer => {
|
||||
const handler = (e: KeyboardEvent) => {
|
||||
const activeElement = this.document.activeElement;
|
||||
const notOnInput = activeElement?.tagName !== 'INPUT' && activeElement?.tagName !== 'TEXTAREA';
|
||||
if (notOnInput) {
|
||||
if (document.URL.endsWith('/slides')) {
|
||||
e.preventDefault();
|
||||
observer.next(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const dispose = this.eventManager.addEventListener(
|
||||
merged.element, event, handler
|
||||
);
|
||||
|
||||
return () => {
|
||||
dispose();
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
protected _handleShortcutsChanged(shortcuts: Shortcuts) {
|
||||
this.shortcuts = shortcuts;
|
||||
this.shortcutsChanged$.emit(this.shortcuts);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
import { TranslateLoader } from '@ngx-translate/core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class TranslationService implements TranslateLoader {
|
||||
constructor(private http: HttpClient) {}
|
||||
|
||||
getTranslation(language: string): Observable<any> {
|
||||
return this.http.get(language === 'default' ? '/assets/en.json' : '/assets/i18n/' + language + '.json');
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { WindowRef} from './window-ref.service';
|
||||
|
||||
describe('WindowRef', () => {
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"_COMMENT": "This file located here instead of in the i18n directory is a workaround for Web API 2.4 or older to prevent HTTP 404 errors while retrieving the en.json file when using Web Remote 0.9.16 or newer.",
|
||||
"ADD_ITEM": "Add Item",
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"BIBLE_VERSION": "Bible version",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
"CHORDS": "Chords",
|
||||
"CONNECTED_TO_OPENLP": "Connected to OpenLP",
|
||||
"DISCONNECTED": "Disconnected",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Enable Big Display Buttons",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Enable Fast Switching Panel",
|
||||
"FONT_SCALE": "Font Scale",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Go Back to Controller",
|
||||
"HIDE_NOTES": "Hide Notes",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_FAILED": "Login failed",
|
||||
"LOGIN_SUCCEEDED": "Successfully logged in",
|
||||
"MAIN_VIEW": "Main View",
|
||||
"NEXT_ITEM": "Next Item",
|
||||
"NEXT_SLIDE": "Next Slide",
|
||||
"NO_SEARCH_RESULTS": "No results matching your search were found",
|
||||
"NO_SERVICE_ITEMS": "No Service Items",
|
||||
"NO_SLIDE_ITEMS": "No Slide Items",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Previous Item",
|
||||
"PREVIOUS_SLIDE": "Previous Slide",
|
||||
"SEARCH": "Search",
|
||||
"SEARCH_RESULTS": "Search Results",
|
||||
"SEARCH_TEXT": "Search Text",
|
||||
"SEND": "Send",
|
||||
"SEND_AN_ALERT": "Send an Alert",
|
||||
"SEND_LIVE": "Send Live",
|
||||
"SERVICE": "Service",
|
||||
"SETTINGS": "Settings",
|
||||
"SHOW_BACKGROUND": "Show Background",
|
||||
"SHOW_BLACK": "Show Black",
|
||||
"SHOW_DESKTOP": "Show Desktop",
|
||||
"SHOW_NOTES": "Show Notes",
|
||||
"SHOW_PRESENTATION": "Show Presentation",
|
||||
"SLIDES": "Slides",
|
||||
"SONG": "Song",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Song level theme changing not supported. Change your theme level to Global or Service",
|
||||
"STAGE": "Stage",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Stage and Chords Appearance",
|
||||
"STAGE_VIEW": "Stage View",
|
||||
"THEMES": "Themes",
|
||||
"THEME_LEVEL": "Theme Level",
|
||||
"THEME_OPTIONS": "Theme Options",
|
||||
"USER_NAME": "User Name",
|
||||
"USER_INTERFACE": "User Interface"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Voeg Item By",
|
||||
"ADD_ITEM_TO_SERVICE": "Voeg Item By Diens",
|
||||
"ADD_TO_SERVICE": "Voeg By Diens",
|
||||
"ALERT": "Waarskuwing",
|
||||
"ALERT_SUBMITTED": "Waarskuwing Ingedien",
|
||||
"ALERTS": "Waarskuwings",
|
||||
"BIBLE_VERSION": "Bybel weergawe",
|
||||
"CHANGE_DISPLAY_MODE": "Verander Vertoonmodus",
|
||||
"CHORD_VIEW": "Akkoordaansig",
|
||||
"CHORDS": "Akkoorde",
|
||||
"CONNECTED_TO_OPENLP": "Gekoppel aan OpenLP",
|
||||
"DISCONNECTED": "Ontkoppel",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Aktiveer Grootskermknoppies",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Aktiveer Vinnige Skakelpaneel",
|
||||
"FONT_SCALE": "Lettertipe Skaal",
|
||||
"GLOBAL": "Globale",
|
||||
"GO_BACK_TO_CONTROLLER": "Gaan Terug na Kontroleerder",
|
||||
"HIDE_NOTES": "Versteek Notas",
|
||||
"LOGIN": "Teken In",
|
||||
"LOGIN_FAILED": "Aanmelding het misluk",
|
||||
"LOGIN_SUCCEEDED": "Suksesvol aangemeld",
|
||||
"MAIN_VIEW": "Hoofaansig",
|
||||
"NEXT_ITEM": "Volgende Item",
|
||||
"NEXT_SLIDE": "Volgende Skyfie",
|
||||
"NO_SEARCH_RESULTS": "Geen resultate wat ooreenstem met jou soektog is gevind nie",
|
||||
"NO_SERVICE_ITEMS": "Geen Diensitems Nie",
|
||||
"NO_SLIDE_ITEMS": "Geen Skyfie-items Nie",
|
||||
"PASSWORD": "Wagwoord",
|
||||
"PREVIOUS_ITEM": "Vorige Item",
|
||||
"PREVIOUS_SLIDE": "Vorige Skyfie",
|
||||
"SEARCH": "Soek",
|
||||
"SEARCH_RESULTS": "Soek Resultate",
|
||||
"SEARCH_TEXT": "Soek Teks",
|
||||
"SEND": "Stuur",
|
||||
"SEND_AN_ALERT": "Stuur 'n Waarskuwing",
|
||||
"SEND_LIVE": "Stuur Regstreeks",
|
||||
"SERVICE": "Diens",
|
||||
"SETTINGS": "Instellings",
|
||||
"SHOW_BACKGROUND": "Wys Agtergrond",
|
||||
"SHOW_BLACK": "Wys Swart",
|
||||
"SHOW_DESKTOP": "Wys Werkskerm",
|
||||
"SHOW_NOTES": "Wys Notas",
|
||||
"SHOW_PRESENTATION": "Wys Voorstelling",
|
||||
"SLIDES": "Skyfies",
|
||||
"SONG": "Lied",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Verandering van liedvlaktema word nie ondersteun nie. Verander jou temavlak na Globaal of Diens",
|
||||
"STAGE": "Verhoog",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Verhoog en Akkoorde Voorkoms",
|
||||
"STAGE_VIEW": "Verhoogaansig",
|
||||
"THEMES": "Temas",
|
||||
"THEME_LEVEL": "Temavlak",
|
||||
"THEME_OPTIONS": "Tema Opsies",
|
||||
"USER_NAME": "Gebruikersnaam",
|
||||
"USER_INTERFACE": "Gebruikerskoppelvlak"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Добави елемент",
|
||||
"ADD_ITEM_TO_SERVICE": "Добави елемент към услугата",
|
||||
"ADD_TO_SERVICE": "Добави към услугата",
|
||||
"ALERT": "Предупреждение",
|
||||
"ALERT_SUBMITTED": "Подадено предупреждение",
|
||||
"ALERTS": "Предупреждения",
|
||||
"BIBLE_VERSION": "Библейска версия",
|
||||
"CHANGE_DISPLAY_MODE": "Промени режима на дисплея",
|
||||
"CHORD_VIEW": "Преглед на акорди",
|
||||
"CHORDS": "Акорди",
|
||||
"CONNECTED_TO_OPENLP": "Свързан с OpenLP",
|
||||
"DISCONNECTED": "Разкачен",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Включи големи бутони на дисплея",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Включи бърз панел за превключване",
|
||||
"FONT_SCALE": "Мащаб на шрифта",
|
||||
"GLOBAL": "Глобално",
|
||||
"GO_BACK_TO_CONTROLLER": "Върни се към контролера",
|
||||
"HIDE_NOTES": "Скрий бележките",
|
||||
"LOGIN": "Вход",
|
||||
"LOGIN_FAILED": "Неуспешно влизане",
|
||||
"LOGIN_SUCCEEDED": "Успешно влизане",
|
||||
"MAIN_VIEW": "Основен изглед",
|
||||
"NEXT_ITEM": "Следващ елемент",
|
||||
"NEXT_SLIDE": "Следващ слайд",
|
||||
"NO_SEARCH_RESULTS": "Няма намерени резултати, отговарящи на вашето търсене",
|
||||
"NO_SERVICE_ITEMS": "Няма елементи за услуга",
|
||||
"NO_SLIDE_ITEMS": "Няма елементи за слайд",
|
||||
"PASSWORD": "Парола",
|
||||
"PREVIOUS_ITEM": "Предишен елемент",
|
||||
"PREVIOUS_SLIDE": "Предишен слайд",
|
||||
"SEARCH": "Търсене",
|
||||
"SEARCH_RESULTS": "Резултати от търсенето",
|
||||
"SEARCH_TEXT": "Текст за търсене",
|
||||
"SEND": "Изпрати",
|
||||
"SEND_AN_ALERT": "Изпрати предупреждение",
|
||||
"SEND_LIVE": "Изпрати на живо",
|
||||
"SERVICE": "Услуга",
|
||||
"SETTINGS": "Настройки",
|
||||
"SHOW_BACKGROUND": "Покажи фона",
|
||||
"SHOW_BLACK": "Покажи черно",
|
||||
"SHOW_DESKTOP": "Покажи работния плот",
|
||||
"SHOW_NOTES": "Покажи бележките",
|
||||
"SHOW_PRESENTATION": "Покажи презентацията",
|
||||
"SLIDES": "Слайдове",
|
||||
"SONG": "Песен",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Промяната на темата на ниво песен не се поддържа. Променете нивото на темата си на Глобално или Услуга",
|
||||
"STAGE": "Сцена",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Външност на сцената и акордите",
|
||||
"STAGE_VIEW": "Изглед на сцената",
|
||||
"THEMES": "Теми",
|
||||
"THEME_LEVEL": "Ниво на темата",
|
||||
"THEME_OPTIONS": "Опции за темата",
|
||||
"USER_NAME": "Потребителско име",
|
||||
"USER_INTERFACE": "Потребителски интерфейс"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Přidat Položku",
|
||||
"ADD_ITEM_TO_SERVICE": "Přidat Položku do Služby",
|
||||
"ADD_TO_SERVICE": "Přidat do Služby",
|
||||
"ALERT": "Upozornění",
|
||||
"ALERT_SUBMITTED": "Výstraha Odeslána",
|
||||
"ALERTS": "Upozornění",
|
||||
"BIBLE_VERSION": "Biblická verze",
|
||||
"CHANGE_DISPLAY_MODE": "Změnit Režim Zobrazení",
|
||||
"CHORD_VIEW": "Zobrazení Akordů",
|
||||
"CHORDS": "Akordy",
|
||||
"CONNECTED_TO_OPENLP": "Připojeno k OpenLP",
|
||||
"DISCONNECTED": "Odpojeno",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Povolit Velká Tlačítka na Displeji",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "ovolit Rychlý Přepínač Panelu",
|
||||
"FONT_SCALE": "Měřítko Písma",
|
||||
"GLOBAL": "Globální",
|
||||
"GO_BACK_TO_CONTROLLER": "Vrátit se Zpět k Ovladači",
|
||||
"HIDE_NOTES": "Skrýt Poznámky",
|
||||
"LOGIN": "Přihlásit Se",
|
||||
"LOGIN_FAILED": "Přihlášení se nezdařilo",
|
||||
"LOGIN_SUCCEEDED": "Úspěšně přihlášeno",
|
||||
"MAIN_VIEW": "Hlavní Zobrazení",
|
||||
"NEXT_ITEM": "Další Položka",
|
||||
"NEXT_SLIDE": "Další Snímek",
|
||||
"NO_SEARCH_RESULTS": "Nebyly nalezeny žádné výsledky odpovídající vašemu hledání",
|
||||
"NO_SERVICE_ITEMS": "Žádné Položky Služby",
|
||||
"NO_SLIDE_ITEMS": "Žádné Položky Snímku",
|
||||
"PASSWORD": "Heslo",
|
||||
"PREVIOUS_ITEM": "Předchozí Položka",
|
||||
"PREVIOUS_SLIDE": "Předchozí Snímek",
|
||||
"SEARCH": "Hledat",
|
||||
"SEARCH_RESULTS": "Výsledky Hledání",
|
||||
"SEARCH_TEXT": "Hledat Text",
|
||||
"SEND": "Odeslat",
|
||||
"SEND_AN_ALERT": "Odeslat Upozornění",
|
||||
"SEND_LIVE": "Odeslat Živě",
|
||||
"SERVICE": "Služba",
|
||||
"SETTINGS": "Nastavení",
|
||||
"SHOW_BACKGROUND": "Zobrazit Pozadí",
|
||||
"SHOW_BLACK": "Zobrazit Černou",
|
||||
"SHOW_DESKTOP": "Zobrazit Plochu",
|
||||
"SHOW_NOTES": "Zobrazit Poznámky",
|
||||
"SHOW_PRESENTATION": "Zobrazit Prezentaci",
|
||||
"SLIDES": "Snímky",
|
||||
"SONG": "Píseň",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Změna tématu na úrovni písně není podporována. Změňte úroveň svého tématu na Globální nebo Službu",
|
||||
"STAGE": "Scéna",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Vzhled Scény a Akordů",
|
||||
"STAGE_VIEW": "Zobrazení Scény",
|
||||
"THEMES": "Témata",
|
||||
"THEME_LEVEL": "Úroveň Tématu",
|
||||
"THEME_OPTIONS": "Možnosti Tématu",
|
||||
"USER_NAME": "Uživatelské Jméno",
|
||||
"USER_INTERFACE": "Uživatelské Rozhraní"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Tilføj Emne",
|
||||
"ADD_ITEM_TO_SERVICE": "Tilføj Emne til Tjeneste",
|
||||
"ADD_TO_SERVICE": "Tilføj til Tjeneste",
|
||||
"ALERT": "Advarsel",
|
||||
"ALERT_SUBMITTED": "Advarsel Indsendt",
|
||||
"ALERTS": "Advarsler",
|
||||
"BIBLE_VERSION": "Bibelsk udgave",
|
||||
"CHANGE_DISPLAY_MODE": "Skift Visningstilstand",
|
||||
"CHORD_VIEW": "Akkordvisning",
|
||||
"CHORDS": "Akkorder",
|
||||
"CONNECTED_TO_OPENLP": "Tilsluttet OpenLP",
|
||||
"DISCONNECTED": "Frakoblet",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Aktivér Store Skærmknapper",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Aktivér Hurtig Skiftepanel",
|
||||
"FONT_SCALE": "Skriftstørrelse",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Gå Tilbage til Controller",
|
||||
"HIDE_NOTES": "Skjul Noter",
|
||||
"LOGIN": "Log Ind",
|
||||
"LOGIN_FAILED": "Login mislykkedes",
|
||||
"LOGIN_SUCCEEDED": "Logget ind",
|
||||
"MAIN_VIEW": "Hovedvisning",
|
||||
"NEXT_ITEM": "Næste Emne",
|
||||
"NEXT_SLIDE": "Næste Dias",
|
||||
"NO_SEARCH_RESULTS": "Ingen resultater fundet for din søgning",
|
||||
"NO_SERVICE_ITEMS": "Ingen Tjenesteemner",
|
||||
"NO_SLIDE_ITEMS": " Ingen Diasemner",
|
||||
"PASSWORD": "Adgangskode",
|
||||
"PREVIOUS_ITEM": "Forrige Emne",
|
||||
"PREVIOUS_SLIDE": "Forrige Dias",
|
||||
"SEARCH": "Søg",
|
||||
"SEARCH_RESULTS": "Søgeresultater",
|
||||
"SEARCH_TEXT": "Søgetekst",
|
||||
"SEND": "Send",
|
||||
"SEND_AN_ALERT": "Send en Advarsel",
|
||||
"SEND_LIVE": "Send Live",
|
||||
"SERVICE": "Tjeneste",
|
||||
"SETTINGS": "Indstillinger",
|
||||
"SHOW_BACKGROUND": "Vis Baggrund",
|
||||
"SHOW_BLACK": "Vis Sort",
|
||||
"SHOW_DESKTOP": "Vis Skrivebord",
|
||||
"SHOW_NOTES": "Vis Noter",
|
||||
"SHOW_PRESENTATION": "Vis Præsentation",
|
||||
"SLIDES": "Dias",
|
||||
"SONG": "Sang",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Temaændring på sangniveau understøttes ikke. Skift dit temaniveau til Global eller Tjeneste",
|
||||
"STAGE": "Scene",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Scene og Akkordudseende",
|
||||
"STAGE_VIEW": "Scenevisning",
|
||||
"THEMES": "Temaer",
|
||||
"THEME_LEVEL": "Temaniveau",
|
||||
"THEME_OPTIONS": "Temaindstillinger",
|
||||
"USER_NAME": "Brugernavn",
|
||||
"USER_INTERFACE": "Brugergrænseflade"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Element Hinzufügen",
|
||||
"ADD_ITEM_TO_SERVICE": "Element zum Ablauf Hinzufügen",
|
||||
"ADD_TO_SERVICE": "Zum Ablauf Hinzufügen",
|
||||
"ALERT": "Hinweise",
|
||||
"ALERT_SUBMITTED": "Hinweise Übermittelt",
|
||||
"ALERTS": "Hinweisen",
|
||||
"BIBLE_VERSION": "Bibelübersetzung",
|
||||
"CHANGE_DISPLAY_MODE": "Anzeigemodus Ändern",
|
||||
"CHORD_VIEW": "Akkordansicht",
|
||||
"CHORDS": "Akkorde",
|
||||
"CONNECTED_TO_OPENLP": "Mit OpenLP Verbunden",
|
||||
"DISCONNECTED": "Getrennt",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Große Anzeige-Schaltflächen Aktivieren",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Schnelles Umschalten Aktivieren",
|
||||
"FONT_SCALE": "Schriftgrad",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Zurück zum Controller",
|
||||
"HIDE_NOTES": "Notizen Ausblenden",
|
||||
"LOGIN": "Anmelden",
|
||||
"LOGIN_FAILED": "Anmeldung fehlgeschlagen",
|
||||
"LOGIN_SUCCEEDED": "Erfolgreich eingeloggt",
|
||||
"MAIN_VIEW": "Hauptansicht",
|
||||
"NEXT_ITEM": "Nächstes Element",
|
||||
"NEXT_SLIDE": "Nächste Folie",
|
||||
"NO_SEARCH_RESULTS": "Keine Suchergebnisse Gefunden",
|
||||
"NO_SERVICE_ITEMS": "Keine Ablauf Elemente",
|
||||
"NO_SLIDE_ITEMS": "Keine Folien-Elemente",
|
||||
"PASSWORD": "Passwort",
|
||||
"PREVIOUS_ITEM": "Vorheriges Element",
|
||||
"PREVIOUS_SLIDE": "Vorherige Folie",
|
||||
"SEARCH": "Suche",
|
||||
"SEARCH_RESULTS": "Suchergebnisse",
|
||||
"SEARCH_TEXT": "Suchtext",
|
||||
"SEND": "Senden",
|
||||
"SEND_AN_ALERT": "Hinweise Senden",
|
||||
"SEND_LIVE": "Live Senden",
|
||||
"SERVICE": "Ablauf",
|
||||
"SETTINGS": "Einstellungen",
|
||||
"SHOW_BACKGROUND": "Hintergrund Anzeigen",
|
||||
"SHOW_BLACK": "Schwarz Anzeigen",
|
||||
"SHOW_DESKTOP": "Desktop Anzeigen",
|
||||
"SHOW_NOTES": "Notizen Anzeigen",
|
||||
"SHOW_PRESENTATION": "Präsentation Anzeigen",
|
||||
"SLIDES": "Folien",
|
||||
"SONG": "Lied",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Das Ändern des Themas auf Liedebene wird nicht unterstützt. Ändern Sie Ihr Themenlevel auf Global oder Ablauf",
|
||||
"STAGE": "Bühne",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Bühnen- und Akkorddarstellung",
|
||||
"STAGE_VIEW": "Bühnenansicht",
|
||||
"THEMES": "Themen",
|
||||
"THEME_LEVEL": "Themenlevel",
|
||||
"THEME_OPTIONS": "Themenoptionen",
|
||||
"USER_NAME": "Benutzername",
|
||||
"USER_INTERFACE": "Benutzeroberfläche"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Προσθήκη στοιχείου",
|
||||
"ADD_ITEM_TO_SERVICE": "Προσθήκη στοιχείου στην υπηρεσία",
|
||||
"ADD_TO_SERVICE": "Προσθήκη στην υπηρεσία",
|
||||
"ALERT": "Ειδοποίηση",
|
||||
"ALERT_SUBMITTED": "Η ειδοποίηση υποβλήθηκε",
|
||||
"ALERTS": "Ειδοποιήσεις",
|
||||
"BIBLE_VERSION": "Βιβλική έκδοση",
|
||||
"CHANGE_DISPLAY_MODE": "Αλλαγή λειτουργίας εμφάνισης",
|
||||
"CHORD_VIEW": "Προβολή συγχορδιών",
|
||||
"CHORDS": "Συγχορδίες",
|
||||
"CONNECTED_TO_OPENLP": "Συνδέθηκε στο OpenLP",
|
||||
"DISCONNECTED": "Αποσυνδέθηκε",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Ενεργοποίηση μεγάλων κουμπιών εμφάνισης",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Ενεργοποίηση γρήγορου πίνακα μετάβασης",
|
||||
"FONT_SCALE": "Κλίμακα γραμματοσειράς",
|
||||
"GLOBAL": "Καθολικό",
|
||||
"GO_BACK_TO_CONTROLLER": "Επιστροφή στον ελεγκτή",
|
||||
"HIDE_NOTES": "Απόκρυψη σημειώσεων",
|
||||
"LOGIN": "Σύνδεση",
|
||||
"LOGIN_FAILED": "Η σύνδεση απέτυχε",
|
||||
"LOGIN_SUCCEEDED": "Συνδέθηκε με επιτυχία",
|
||||
"MAIN_VIEW": "Κύρια προβολή",
|
||||
"NEXT_ITEM": "Επόμενο στοιχείο",
|
||||
"NEXT_SLIDE": "Επόμενη διαφάνεια",
|
||||
"NO_SEARCH_RESULTS": "Δεν βρέθηκαν αποτελέσματα που να ταιριάζουν με την αναζήτησή σας",
|
||||
"NO_SERVICE_ITEMS": "Δεν υπάρχουν στοιχεία υπηρεσίας",
|
||||
"NO_SLIDE_ITEMS": "Δεν υπάρχουν στοιχεία διαφανειών",
|
||||
"PASSWORD": "Κωδικός πρόσβασης",
|
||||
"PREVIOUS_ITEM": "Προηγούμενο στοιχείο",
|
||||
"PREVIOUS_SLIDE": "Προηγούμενη διαφάνεια",
|
||||
"SEARCH": "Αναζήτηση",
|
||||
"SEARCH_RESULTS": "Αποτελέσματα αναζήτησης",
|
||||
"SEARCH_TEXT": "Κείμενο αναζήτησης",
|
||||
"SEND": "Αποστολή",
|
||||
"SEND_AN_ALERT": "Αποστολή ειδοποίησης",
|
||||
"SEND_LIVE": "Αποστολή σε πραγματικό χρόνο",
|
||||
"SERVICE": "Υπηρεσία",
|
||||
"SETTINGS": "Ρυθμίσεις",
|
||||
"SHOW_BACKGROUND": "Εμφάνιση φόντου",
|
||||
"SHOW_BLACK": "Εμφάνιση μαύρου",
|
||||
"SHOW_DESKTOP": "Εμφάνιση Επιφάνειας Εργασίας",
|
||||
"SHOW_NOTES": "Εμφάνιση Σημειώσεων",
|
||||
"SHOW_PRESENTATION": "Εμφάνιση Παρουσίασης",
|
||||
"SLIDES": "Διαφάνειες",
|
||||
"SONG": "Τραγούδι",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Μη Υποστηριζόμενη Αλλαγή Θέματος σε Επίπεδο Τραγουδιού",
|
||||
"STAGE": "Σκηνή",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Εμφάνιση Σκηνής και Συγχορδιών",
|
||||
"STAGE_VIEW": "Προβολή Σκηνής",
|
||||
"THEMES": "Θέματα",
|
||||
"THEME_LEVEL": "Επίπεδο Θέματος",
|
||||
"THEME_OPTIONS": "Επιλογές Θέματος",
|
||||
"USER_NAME": "Όνομα Χρήστη",
|
||||
"USER_INTERFACE": "Διεπαφή Χρήστη"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Add Item",
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"BIBLE_VERSION": "Bible version",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
"CHORDS": "Chords",
|
||||
"CONNECTED_TO_OPENLP": "Connected to OpenLP",
|
||||
"DISCONNECTED": "Disconnected",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Enable Big Display Buttons",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Enable Fast Switching Panel",
|
||||
"FONT_SCALE": "Font Scale",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Go Back to Controller",
|
||||
"HIDE_NOTES": "Hide Notes",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_FAILED": "Login failed",
|
||||
"LOGIN_SUCCEEDED": "Successfully logged in",
|
||||
"MAIN_VIEW": "Main View",
|
||||
"NEXT_ITEM": "Next Item",
|
||||
"NEXT_SLIDE": "Next Slide",
|
||||
"NO_SEARCH_RESULTS": "No results matching your search were found",
|
||||
"NO_SERVICE_ITEMS": "No Service Items",
|
||||
"NO_SLIDE_ITEMS": "No Slide Items",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Previous Item",
|
||||
"PREVIOUS_SLIDE": "Previous Slide",
|
||||
"SEARCH": "Search",
|
||||
"SEARCH_RESULTS": "Search Results",
|
||||
"SEARCH_TEXT": "Search Text",
|
||||
"SEND": "Send",
|
||||
"SEND_AN_ALERT": "Send an Alert",
|
||||
"SEND_LIVE": "Send Live",
|
||||
"SERVICE": "Service",
|
||||
"SETTINGS": "Settings",
|
||||
"SHOW_BACKGROUND": "Show Background",
|
||||
"SHOW_BLACK": "Show Black",
|
||||
"SHOW_DESKTOP": "Show Desktop",
|
||||
"SHOW_NOTES": "Show Notes",
|
||||
"SHOW_PRESENTATION": "Show Presentation",
|
||||
"SLIDES": "Slides",
|
||||
"SONG": "Song",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Song level theme changing not supported. Change your theme level to Global or Service",
|
||||
"STAGE": "Stage",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Stage and Chords Appearance",
|
||||
"STAGE_VIEW": "Stage View",
|
||||
"THEMES": "Themes",
|
||||
"THEME_LEVEL": "Theme Level",
|
||||
"THEME_OPTIONS": "Theme Options",
|
||||
"USER_NAME": "User Name",
|
||||
"USER_INTERFACE": "User Interface"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Add Item",
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"BIBLE_VERSION": "Bible version",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
"CHORDS": "Chords",
|
||||
"CONNECTED_TO_OPENLP": "Connected to OpenLP",
|
||||
"DISCONNECTED": "Disconnected",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Enable Big Display Buttons",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Enable Fast Switching Panel",
|
||||
"FONT_SCALE": "Font Scale",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Go Back to Controller",
|
||||
"HIDE_NOTES": "Hide Notes",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_FAILED": "Login failed",
|
||||
"LOGIN_SUCCEEDED": "Successfully logged in",
|
||||
"MAIN_VIEW": "Main View",
|
||||
"NEXT_ITEM": "Next Item",
|
||||
"NEXT_SLIDE": "Next Slide",
|
||||
"NO_SEARCH_RESULTS": "No results matching your search were found",
|
||||
"NO_SERVICE_ITEMS": "No Service Items",
|
||||
"NO_SLIDE_ITEMS": "No Slide Items",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Previous Item",
|
||||
"PREVIOUS_SLIDE": "Previous Slide",
|
||||
"SEARCH": "Search",
|
||||
"SEARCH_RESULTS": "Search Results",
|
||||
"SEARCH_TEXT": "Search Text",
|
||||
"SEND": "Send",
|
||||
"SEND_AN_ALERT": "Send an Alert",
|
||||
"SEND_LIVE": "Send Live",
|
||||
"SERVICE": "Service",
|
||||
"SETTINGS": "Settings",
|
||||
"SHOW_BACKGROUND": "Show Background",
|
||||
"SHOW_BLACK": "Show Black",
|
||||
"SHOW_DESKTOP": "Show Desktop",
|
||||
"SHOW_NOTES": "Show Notes",
|
||||
"SHOW_PRESENTATION": "Show Presentation",
|
||||
"SLIDES": "Slides",
|
||||
"SONG": "Song",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Song level theme changing not supported. Change your theme level to Global or Service",
|
||||
"STAGE": "Stage",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Stage and Chords Appearance",
|
||||
"STAGE_VIEW": "Stage View",
|
||||
"THEMES": "Themes",
|
||||
"THEME_LEVEL": "Theme Level",
|
||||
"THEME_OPTIONS": "Theme Options",
|
||||
"USER_NAME": "User Name",
|
||||
"USER_INTERFACE": "User Interface"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Add Item",
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"BIBLE_VERSION": "Bible version",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
"CHORDS": "Chords",
|
||||
"CONNECTED_TO_OPENLP": "Connected to OpenLP",
|
||||
"DISCONNECTED": "Disconnected",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Enable Big Display Buttons",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Enable Fast Switching Panel",
|
||||
"FONT_SCALE": "Font Scale",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Go Back to Controller",
|
||||
"HIDE_NOTES": "Hide Notes",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_FAILED": "Login failed",
|
||||
"LOGIN_SUCCEEDED": "Successfully logged in",
|
||||
"MAIN_VIEW": "Main View",
|
||||
"NEXT_ITEM": "Next Item",
|
||||
"NEXT_SLIDE": "Next Slide",
|
||||
"NO_SEARCH_RESULTS": "No results matching your search were found",
|
||||
"NO_SERVICE_ITEMS": "No Service Items",
|
||||
"NO_SLIDE_ITEMS": "No Slide Items",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Previous Item",
|
||||
"PREVIOUS_SLIDE": "Previous Slide",
|
||||
"SEARCH": "Search",
|
||||
"SEARCH_RESULTS": "Search Results",
|
||||
"SEARCH_TEXT": "Search Text",
|
||||
"SEND": "Send",
|
||||
"SEND_AN_ALERT": "Send an Alert",
|
||||
"SEND_LIVE": "Send Live",
|
||||
"SERVICE": "Service",
|
||||
"SETTINGS": "Settings",
|
||||
"SHOW_BACKGROUND": "Show Background",
|
||||
"SHOW_BLACK": "Show Black",
|
||||
"SHOW_DESKTOP": "Show Desktop",
|
||||
"SHOW_NOTES": "Show Notes",
|
||||
"SHOW_PRESENTATION": "Show Presentation",
|
||||
"SLIDES": "Slides",
|
||||
"SONG": "Song",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Song level theme changing not supported. Change your theme level to Global or Service",
|
||||
"STAGE": "Stage",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Stage and Chords Appearance",
|
||||
"STAGE_VIEW": "Stage View",
|
||||
"THEMES": "Themes",
|
||||
"THEME_LEVEL": "Theme Level",
|
||||
"THEME_OPTIONS": "Theme Options",
|
||||
"USER_NAME": "User Name",
|
||||
"USER_INTERFACE": "User Interface"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Agregar Elemento",
|
||||
"ADD_ITEM_TO_SERVICE": "Agregar Elemento al Servicio",
|
||||
"ADD_TO_SERVICE": "Agregar al Servicio",
|
||||
"ALERT": "Alerta",
|
||||
"ALERT_SUBMITTED": "Alerta Enviada",
|
||||
"ALERTS": "Alertas",
|
||||
"BIBLE_VERSION": "Versión de la Biblia",
|
||||
"CHANGE_DISPLAY_MODE": "Cambiar Modo de Visualización",
|
||||
"CHORD_VIEW": "Vista de Acordes",
|
||||
"CHORDS": "Acordes",
|
||||
"CONNECTED_TO_OPENLP": "Conectado a OpenLP",
|
||||
"DISCONNECTED": "Desconectado",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Habilitar Botones de Pantalla Grande",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Habilitar Panel de Cambio Rápido",
|
||||
"FONT_SCALE": "Escala de Fuente",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Volver al Controlador",
|
||||
"HIDE_NOTES": "Ocultar Notas",
|
||||
"LOGIN": "Iniciar Sesión",
|
||||
"LOGIN_FAILED": "Error de inicio de sesión",
|
||||
"LOGIN_SUCCEEDED": "Ha iniciado sesión correctamente",
|
||||
"MAIN_VIEW": "Vista Principal",
|
||||
"NEXT_ITEM": "Siguiente Elemento",
|
||||
"NEXT_SLIDE": "Siguiente Diapositiva",
|
||||
"NO_SEARCH_RESULTS": "No se encontraron resultados que coincidan con su búsqueda",
|
||||
"NO_SERVICE_ITEMS": "No Hay Elementos de Servicio",
|
||||
"NO_SLIDE_ITEMS": "No Hay Elementos de Diapositiva",
|
||||
"PASSWORD": "Contraseña",
|
||||
"PREVIOUS_ITEM": "Elemento Anterior",
|
||||
"PREVIOUS_SLIDE": "Diapositiva Anterior",
|
||||
"SEARCH": "Buscar",
|
||||
"SEARCH_RESULTS": "Resultados de Búsqueda",
|
||||
"SEARCH_TEXT": "Texto de Búsqueda",
|
||||
"SEND": "Enviar",
|
||||
"SEND_AN_ALERT": "Enviar una Alerta",
|
||||
"SEND_LIVE": "Enviar en Vivo",
|
||||
"SERVICE": "Servicio",
|
||||
"SETTINGS": "Configuración",
|
||||
"SHOW_BACKGROUND": "Mostrar Fondo",
|
||||
"SHOW_BLACK": "Mostrar Negro",
|
||||
"SHOW_DESKTOP": "Mostrar Escritorio",
|
||||
"SHOW_NOTES": "Mostrar Notas",
|
||||
"SHOW_PRESENTATION": "Mostrar Presentación",
|
||||
"SLIDES": "Diapositivas",
|
||||
"SONG": "Canción",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "No se admite el cambio de tema a nivel de canción. Cambie su nivel de tema a Global o Servicio",
|
||||
"STAGE": "Escenario",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Apariencia de Escenario y Acordes",
|
||||
"STAGE_VIEW": "Vista de Escenario",
|
||||
"THEMES": "Temas",
|
||||
"THEME_LEVEL": "Nivel de Tema",
|
||||
"THEME_OPTIONS": "Opciones de Tema",
|
||||
"USER_NAME": "Nombre de Usuario",
|
||||
"USER_INTERFACE": "Interfaz de Usuario"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Agregar Elemento",
|
||||
"ADD_ITEM_TO_SERVICE": "Agregar Elemento al Servicio",
|
||||
"ADD_TO_SERVICE": "Agregar al Servicio",
|
||||
"ALERT": "Alerta",
|
||||
"ALERT_SUBMITTED": "Alerta Enviada",
|
||||
"ALERTS": "Alertas",
|
||||
"BIBLE_VERSION": "Versión de la Biblia",
|
||||
"CHANGE_DISPLAY_MODE": "Cambiar Modo de Visualización",
|
||||
"CHORD_VIEW": "Vista de Acordes",
|
||||
"CHORDS": "Acordes",
|
||||
"CONNECTED_TO_OPENLP": "Conectado a OpenLP",
|
||||
"DISCONNECTED": "Desconectado",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Habilitar Botones de Pantalla Grande",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Habilitar Panel de Cambio Rápido",
|
||||
"FONT_SCALE": "Escala de Fuente",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Volver al Controlador",
|
||||
"HIDE_NOTES": "Ocultar Notas",
|
||||
"LOGIN": "Iniciar Sesión",
|
||||
"LOGIN_FAILED": "Error de inicio de sesión",
|
||||
"LOGIN_SUCCEEDED": "Ha iniciado sesión correctamente",
|
||||
"MAIN_VIEW": "Vista Principal",
|
||||
"NEXT_ITEM": "Siguiente Elemento",
|
||||
"NEXT_SLIDE": "Siguiente Diapositiva",
|
||||
"NO_SEARCH_RESULTS": "No se encontraron resultados que coincidan con su búsqueda",
|
||||
"NO_SERVICE_ITEMS": "No Hay Elementos de Servicio",
|
||||
"NO_SLIDE_ITEMS": "No Hay Elementos de Diapositiva",
|
||||
"PASSWORD": "Contraseña",
|
||||
"PREVIOUS_ITEM": "Elemento Anterior",
|
||||
"PREVIOUS_SLIDE": "Diapositiva Anterior",
|
||||
"SEARCH": "Buscar",
|
||||
"SEARCH_RESULTS": "Resultados de Búsqueda",
|
||||
"SEARCH_TEXT": "Texto de Búsqueda",
|
||||
"SEND": "Enviar",
|
||||
"SEND_AN_ALERT": "Enviar una Alerta",
|
||||
"SEND_LIVE": "Enviar en Vivo",
|
||||
"SERVICE": "Servicio",
|
||||
"SETTINGS": "Configuración",
|
||||
"SHOW_BACKGROUND": "Mostrar Fondo",
|
||||
"SHOW_BLACK": "Mostrar Negro",
|
||||
"SHOW_DESKTOP": "Mostrar Escritorio",
|
||||
"SHOW_NOTES": "Mostrar Notas",
|
||||
"SHOW_PRESENTATION": "Mostrar Presentación",
|
||||
"SLIDES": "Diapositivas",
|
||||
"SONG": "Canción",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "No se admite el cambio de tema a nivel de canción. Cambie su nivel de tema a Global o Servicio",
|
||||
"STAGE": "Escenario",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Apariencia de Escenario y Acordes",
|
||||
"STAGE_VIEW": "Vista de Escenario",
|
||||
"THEMES": "Temas",
|
||||
"THEME_LEVEL": "Nivel de Tema",
|
||||
"THEME_OPTIONS": "Opciones de Tema",
|
||||
"USER_NAME": "Nombre de Usuario",
|
||||
"USER_INTERFACE": "Interfaz de Usuario"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Üksuse Lisamine",
|
||||
"ADD_ITEM_TO_SERVICE": "Üksuse Lisamine Teenusesse",
|
||||
"ADD_TO_SERVICE": "Lisa Teenusesse",
|
||||
"ALERT": "Teatise",
|
||||
"ALERT_SUBMITTED": "Hoiatusteade on Esitatud",
|
||||
"ALERTS": "Teatised",
|
||||
"BIBLE_VERSION": "Piibli versioon",
|
||||
"CHANGE_DISPLAY_MODE": "Muuda Kuvamisrežiimi",
|
||||
"CHORD_VIEW": "Akordi Vaade",
|
||||
"CHORDS": "Akorde",
|
||||
"CONNECTED_TO_OPENLP": "Ühendatud OpenLP-ga",
|
||||
"DISCONNECTED": "Lahti",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Luba Suured Kuvanupud",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Luba Kiire Lülituspaneel",
|
||||
"FONT_SCALE": "Fondi Mastaap",
|
||||
"GLOBAL": "Ülemaailmne",
|
||||
"GO_BACK_TO_CONTROLLER": "Tagasi Kontrolleri Juurde",
|
||||
"HIDE_NOTES": "Märkmete Peitmine",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_FAILED": "Sisselogimine ebaõnnestus",
|
||||
"LOGIN_SUCCEEDED": "Edukalt sisse logitud",
|
||||
"MAIN_VIEW": "Põhivaade",
|
||||
"NEXT_ITEM": "Järgmine Päevakorrapunkt",
|
||||
"NEXT_SLIDE": "Järgmine Slaid",
|
||||
"NO_SEARCH_RESULTS": "Teie otsingule vastavaid tulemusi ei leitud",
|
||||
"NO_SERVICE_ITEMS": "Teenindusüksusi Pole",
|
||||
"NO_SLIDE_ITEMS": "Slaidiüksusi Pole",
|
||||
"PASSWORD": "Salasõna",
|
||||
"PREVIOUS_ITEM": "Eelmine Punkt",
|
||||
"PREVIOUS_SLIDE": "Eelmine Slaid",
|
||||
"SEARCH": "Otsing",
|
||||
"SEARCH_RESULTS": "Otsingutulemuste",
|
||||
"SEARCH_TEXT": "Tekstist otsimine",
|
||||
"SEND": "Saatma",
|
||||
"SEND_AN_ALERT": "Teatise Saatmine",
|
||||
"SEND_LIVE": "Saada Otseülekanne",
|
||||
"SERVICE": "Teenus",
|
||||
"SETTINGS": "Seaded",
|
||||
"SHOW_BACKGROUND": "Kuva Taust",
|
||||
"SHOW_BLACK": "Näita Musta",
|
||||
"SHOW_DESKTOP": "Kuva Töölaud",
|
||||
"SHOW_NOTES": "Kuva Märkmed",
|
||||
"SHOW_PRESENTATION": "Kuva Esitlus",
|
||||
"SLIDES": "Slaidid",
|
||||
"SONG": "Laul",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Laulutaseme teema muutmine pole toetatud. Teemataseme muutmine üldiseks või teenusetasemeks",
|
||||
"STAGE": "Lava",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Lava ja Akordide Välimus",
|
||||
"STAGE_VIEW": "Lavavaade",
|
||||
"THEMES": "Teemad",
|
||||
"THEME_LEVEL": "Teema Tase",
|
||||
"THEME_OPTIONS": "Teema Valikud",
|
||||
"USER_NAME": "Kasutajanimi",
|
||||
"USER_INTERFACE": "Kasutajaliides"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Lisää Kohde",
|
||||
"ADD_ITEM_TO_SERVICE": "Lisää Tuote Palveluun",
|
||||
"ADD_TO_SERVICE": "Lisää Palveluun",
|
||||
"ALERT": "Huomio Viesti",
|
||||
"ALERT_SUBMITTED": "Ilmoitus Lähetetty",
|
||||
"ALERTS": "Huomio Viestit",
|
||||
"BIBLE_VERSION": "Raamatun versio",
|
||||
"CHANGE_DISPLAY_MODE": "Vaihda Näyttötilaa",
|
||||
"CHORD_VIEW": "Sointunäkymä",
|
||||
"CHORDS": "Soinnut",
|
||||
"CONNECTED_TO_OPENLP": "Yhdistetty OpenLP:hen",
|
||||
"DISCONNECTED": "Hajanainen",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Ota Käyttöön Suuret Näyttöpainikkeet",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Ota Nopea Kytkentäpaneeli Käyttöön",
|
||||
"FONT_SCALE": "Fontin Asteikko",
|
||||
"GLOBAL": "Yleinen",
|
||||
"GO_BACK_TO_CONTROLLER": "Palaa Ohjaimeen",
|
||||
"HIDE_NOTES": "Piilota Muistiinpanot",
|
||||
"LOGIN": "Kirjaudu",
|
||||
"LOGIN_FAILED": "Kirjautuminen epäonnistui",
|
||||
"LOGIN_SUCCEEDED": "Kirjautuminen onnistui",
|
||||
"MAIN_VIEW": "Päänäkymä",
|
||||
"NEXT_ITEM": "Seuraava Kohta",
|
||||
"NEXT_SLIDE": "Seuraava Dia",
|
||||
"NO_SEARCH_RESULTS": "Hakuasi vastaavia tuloksia ei löytynyt",
|
||||
"NO_SERVICE_ITEMS": "Ei Huoltokohteita",
|
||||
"NO_SLIDE_ITEMS": "Ei Diakohteita",
|
||||
"PASSWORD": "Salasana",
|
||||
"PREVIOUS_ITEM": "Edellinen Kohde",
|
||||
"PREVIOUS_SLIDE": "Edellinen Dia",
|
||||
"SEARCH": "Etsiä",
|
||||
"SEARCH_RESULTS": "Tulokset",
|
||||
"SEARCH_TEXT": "Hae Tekstiä",
|
||||
"SEND": "Lähettää",
|
||||
"SEND_AN_ALERT": "Lähetä Huomioviesti",
|
||||
"SEND_LIVE": "Lähetä Livenä",
|
||||
"SERVICE": "Palvelu",
|
||||
"SETTINGS": "Asetukset",
|
||||
"SHOW_BACKGROUND": "Näytä Tausta",
|
||||
"SHOW_BLACK": "Näytä Musta",
|
||||
"SHOW_DESKTOP": "Näytä Työpöytä",
|
||||
"SHOW_NOTES": "Näytä Muistiinpanot",
|
||||
"SHOW_PRESENTATION": "Näytä Esitys",
|
||||
"SLIDES": "Dioja",
|
||||
"SONG": "Laulu",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Kappaletason teeman vaihtamista ei tueta. Muuta teematasoksi Yleinen tai Palvelu",
|
||||
"STAGE": "Näyttämö",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Näyttämön ja Sointujen Ulkonäkö",
|
||||
"STAGE_VIEW": "Näyttämönäkymä",
|
||||
"THEMES": "Teemoja",
|
||||
"THEME_LEVEL": "Teeman Taso",
|
||||
"THEME_OPTIONS": "Teeman Asetukset",
|
||||
"USER_NAME": "Käyttäjänimi",
|
||||
"USER_INTERFACE": "Käyttöliittymä"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Ajouter un Élément",
|
||||
"ADD_ITEM_TO_SERVICE": "Ajouter un Élément au Service",
|
||||
"ADD_TO_SERVICE": "Ajouter au Service",
|
||||
"ALERT": "Alerte",
|
||||
"ALERT_SUBMITTED": "Alerte Soumise",
|
||||
"ALERTS": "Alertes",
|
||||
"BIBLE_VERSION": "Version de la Bible",
|
||||
"CHANGE_DISPLAY_MODE": "Changer le Mode d’Affichage",
|
||||
"CHORD_VIEW": "Vue des Accords",
|
||||
"CHORDS": "Accords",
|
||||
"CONNECTED_TO_OPENLP": "Connecté à OpenLP",
|
||||
"DISCONNECTED": "Déconnecté",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Activer les Gros Boutons d’Afichage",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Activer le Panneau de Commutation Rapide",
|
||||
"FONT_SCALE": "Échelle de Police",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Retour au Contrôleur",
|
||||
"HIDE_NOTES": "Masquer les Notes",
|
||||
"LOGIN": "Connexion",
|
||||
"LOGIN_FAILED": "Echec de la connexion",
|
||||
"LOGIN_SUCCEEDED": "Connexion réussie",
|
||||
"MAIN_VIEW": "Vue Principale",
|
||||
"NEXT_ITEM": "Élément Suivant",
|
||||
"NEXT_SLIDE": "Diapositive Suivante",
|
||||
"NO_SEARCH_RESULTS": "Aucun résultat correspondant à votre recherche n’a été trouvé",
|
||||
"NO_SERVICE_ITEMS": "Aucun Élément de Service",
|
||||
"NO_SLIDE_ITEMS": "Aucun Élément de Diapositive",
|
||||
"PASSWORD": "Mot de Passe",
|
||||
"PREVIOUS_ITEM": "Élément Précédent",
|
||||
"PREVIOUS_SLIDE": "Diapositive Précédente",
|
||||
"SEARCH": "Recherche",
|
||||
"SEARCH_RESULTS": "Résultats de la Recherche",
|
||||
"SEARCH_TEXT": "Texte de Recherche",
|
||||
"SEND": "Envoyer",
|
||||
"SEND_AN_ALERT": "Envoyer une Alerte",
|
||||
"SEND_LIVE": "Envoyer en Direct",
|
||||
"SERVICE": "Service",
|
||||
"SETTINGS": "Paramètres",
|
||||
"SHOW_BACKGROUND": "Afficher l’Arrière-plan",
|
||||
"SHOW_BLACK": "Afficher écran Noir",
|
||||
"SHOW_DESKTOP": "Afficher le Bureau",
|
||||
"SHOW_NOTES": "Afficher les Notes",
|
||||
"SHOW_PRESENTATION": "Afficher la Présentation",
|
||||
"SLIDES": "Diapositives",
|
||||
"SONG": "Chanson",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Le changement de thème au niveau de la chanson n’est pas pris en charge. Changez votre niveau de thème en Global ou Service",
|
||||
"STAGE": "Scène",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Apparence de la Scène et des Accords",
|
||||
"STAGE_VIEW": "Vue de la Scène",
|
||||
"THEMES": "Thèmes",
|
||||
"THEME_LEVEL": "Niveau de Thème",
|
||||
"THEME_OPTIONS": "Options de Thème",
|
||||
"USER_NAME": "Nom d’Utilisateur",
|
||||
"USER_INTERFACE": "Interface Utilisateur"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Elem Hozzáadása",
|
||||
"ADD_ITEM_TO_SERVICE": "Elem Hozzáadása a Szolgáltatáshoz",
|
||||
"ADD_TO_SERVICE": "Hozzáadás a Szolgáltatáshoz",
|
||||
"ALERT": "Riasztási",
|
||||
"ALERT_SUBMITTED": "Riasztás Elküldve",
|
||||
"ALERTS": "Riasztások",
|
||||
"BIBLE_VERSION": "Bibliai változat",
|
||||
"CHANGE_DISPLAY_MODE": "Megjelenítési mód Módosítása",
|
||||
"CHORD_VIEW": "Akkord Nézet",
|
||||
"CHORDS": "Akkordok",
|
||||
"CONNECTED_TO_OPENLP": "OpenLP-hez Csatlakoztatva",
|
||||
"DISCONNECTED": "Elválasztott",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Nagy Kijelzőgombok Engedélyezése",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Gyors Váltás Engedélyezése Panel",
|
||||
"FONT_SCALE": "Betűméret",
|
||||
"GLOBAL": "Globális",
|
||||
"GO_BACK_TO_CONTROLLER": "Vissza a Kontrollerhez",
|
||||
"HIDE_NOTES": "Jegyzetek Elrejtése",
|
||||
"LOGIN": "Bejelentkezés",
|
||||
"LOGIN_FAILED": "Sikertelen bejelentkezés",
|
||||
"LOGIN_SUCCEEDED": "Sikeresen bejelentkezve",
|
||||
"MAIN_VIEW": "Fő Nézet",
|
||||
"NEXT_ITEM": "Következő Elem",
|
||||
"NEXT_SLIDE": "Következő Dia",
|
||||
"NO_SEARCH_RESULTS": "Nem található a keresésének megfelelő találat",
|
||||
"NO_SERVICE_ITEMS": "Nincs Szolgáltatási Elem",
|
||||
"NO_SLIDE_ITEMS": "Nincsenek Diaelemek",
|
||||
"PASSWORD": "Jelszó",
|
||||
"PREVIOUS_ITEM": "Előző Tétel",
|
||||
"PREVIOUS_SLIDE": "Előző Dia",
|
||||
"SEARCH": "Keresés",
|
||||
"SEARCH_RESULTS": "Keresési Eredmények",
|
||||
"SEARCH_TEXT": "Szöveg Keresése",
|
||||
"SEND": "Küld",
|
||||
"SEND_AN_ALERT": "Riasztás Küldése",
|
||||
"SEND_LIVE": "Élő Küldés",
|
||||
"SERVICE": "Szolgáltatás",
|
||||
"SETTINGS": "Beállítások",
|
||||
"SHOW_BACKGROUND": "Háttér Megjelenítése",
|
||||
"SHOW_BLACK": "Mutasd a Feketét",
|
||||
"SHOW_DESKTOP": "Asztal Megjelenítése",
|
||||
"SHOW_NOTES": "Jegyzetek Megjelenítése",
|
||||
"SHOW_PRESENTATION": "Bemutató Megjelenítése",
|
||||
"SLIDES": "Diák",
|
||||
"SONG": "Dal",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "A dalszintű témaváltás nem támogatott. Módosítsa a téma szintjét Globális vagy Szolgáltatás értékre",
|
||||
"STAGE": "Színpad",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Színpad és Akkordok Megjelenése",
|
||||
"STAGE_VIEW": "Színpadi Nézet",
|
||||
"THEMES": "Témák",
|
||||
"THEME_LEVEL": "Téma Szintje",
|
||||
"THEME_OPTIONS": "Téma Beállítások",
|
||||
"USER_NAME": "Felhasználónév",
|
||||
"USER_INTERFACE": "Felhasználói Felület"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Tambahkan Item",
|
||||
"ADD_ITEM_TO_SERVICE": "Tambahkan Item ke Layanan",
|
||||
"ADD_TO_SERVICE": "Tambahkan ke Layanan",
|
||||
"ALERT": "Peringatan",
|
||||
"ALERT_SUBMITTED": "Peringatan Dikirim",
|
||||
"ALERTS": "Peringatan",
|
||||
"BIBLE_VERSION": "Versi Alkitab",
|
||||
"CHANGE_DISPLAY_MODE": "Ubah Mode Tampilan",
|
||||
"CHORD_VIEW": "Tampilan Kunci",
|
||||
"CHORDS": "Kunci",
|
||||
"CONNECTED_TO_OPENLP": "Terhubung ke OpenLP",
|
||||
"DISCONNECTED": "Terputus",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Aktifkan Tombol Tampilan Besar",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Aktifkan Panel Peralihan Cepat",
|
||||
"FONT_SCALE": "Skala Font",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Kembali ke Pengontrol",
|
||||
"HIDE_NOTES": "Sembunyikan Catatan",
|
||||
"LOGIN": "Masuk",
|
||||
"LOGIN_FAILED": "Login gagal",
|
||||
"LOGIN_SUCCEEDED": "Berhasil login",
|
||||
"MAIN_VIEW": "Tampilan Utama",
|
||||
"NEXT_ITEM": "Item Berikutnya",
|
||||
"NEXT_SLIDE": "Slide Berikutnya",
|
||||
"NO_SEARCH_RESULTS": "Tidak ada hasil yang cocok dengan pencarian Anda",
|
||||
"NO_SERVICE_ITEMS": "Tidak ada Item Layanan",
|
||||
"NO_SLIDE_ITEMS": "Tidak ada Item Slide",
|
||||
"PASSWORD": "Kata Sandi",
|
||||
"PREVIOUS_ITEM": "Item Sebelumnya",
|
||||
"PREVIOUS_SLIDE": "Slide Sebelumnya",
|
||||
"SEARCH": "Cari",
|
||||
"SEARCH_RESULTS": "Hasil Pencarian",
|
||||
"SEARCH_TEXT": "Teks Pencarian",
|
||||
"SEND": "Kirim",
|
||||
"SEND_AN_ALERT": "Kirim Peringatan",
|
||||
"SEND_LIVE": "Kirim Langsung",
|
||||
"SERVICE": "Layanan",
|
||||
"SETTINGS": "Pengaturan",
|
||||
"SHOW_BACKGROUND": "Tampilkan Latar Belakang",
|
||||
"SHOW_BLACK": "Tampilkan Hitam",
|
||||
"SHOW_DESKTOP": "Tampilkan Desktop",
|
||||
"SHOW_NOTES": "Tampilkan Catatan",
|
||||
"SHOW_PRESENTATION": "Tampilkan Presentasi",
|
||||
"SLIDES": "Slide",
|
||||
"SONG": "Lagu",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Perubahan tema pada tingkat lagu tidak didukung. Ubah tingkat tema Anda menjadi Global atau Layanan",
|
||||
"STAGE": "Panggung",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Penampilan Panggung dan Kunci",
|
||||
"STAGE_VIEW": "Tampilan Panggung",
|
||||
"THEMES": "Tema",
|
||||
"THEME_LEVEL": "Tingkat Tema",
|
||||
"THEME_OPTIONS": "Opsi Tema",
|
||||
"USER_NAME": "Nama Pengguna",
|
||||
"USER_INTERFACE": "Antarmuka Pengguna"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Aggiungi Elemento",
|
||||
"ADD_ITEM_TO_SERVICE": "Aggiungi Elemento al Servizio",
|
||||
"ADD_TO_SERVICE": "Aggiungi al Servizio",
|
||||
"ALERT": "Allarme",
|
||||
"ALERT_SUBMITTED": "Avviso Inviato",
|
||||
"ALERTS": "Avvisi",
|
||||
"BIBLE_VERSION": "Versione biblica",
|
||||
"CHANGE_DISPLAY_MODE": "Cambia Modalità di Visualizzazione",
|
||||
"CHORD_VIEW": "Vista degli Accordi",
|
||||
"CHORDS": "Accordi",
|
||||
"CONNECTED_TO_OPENLP": "Collegato a OpenLP",
|
||||
"DISCONNECTED": "Disconnesso",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Abilita i Grandi Pulsanti di Visualizzazione",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Abilita il Pannello di Commutazione Rapida",
|
||||
"FONT_SCALE": "Scala del Carattere",
|
||||
"GLOBAL": "Globale",
|
||||
"GO_BACK_TO_CONTROLLER": "Torna al Controller",
|
||||
"HIDE_NOTES": "Nascondi le Note",
|
||||
"LOGIN": "Accedi",
|
||||
"LOGIN_FAILED": "Accesso non riuscito",
|
||||
"LOGIN_SUCCEEDED": "Accesso effettuato con successo",
|
||||
"MAIN_VIEW": "Vista Principale",
|
||||
"NEXT_ITEM": "Prossimo Elemento",
|
||||
"NEXT_SLIDE": "Prossima Diapositiva",
|
||||
"NO_SEARCH_RESULTS": "Nessun risultato corrispondente alla tua ricerca è stato trovato",
|
||||
"NO_SERVICE_ITEMS": "Nessun Elemento di Servizio",
|
||||
"NO_SLIDE_ITEMS": "Nessun Elemento Diapositiva",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Elemento Precedente",
|
||||
"PREVIOUS_SLIDE": "Diapositiva Precedente",
|
||||
"SEARCH": "Cerca",
|
||||
"SEARCH_RESULTS": "Risultati della Ricerca",
|
||||
"SEARCH_TEXT": "Testo di Ricerca",
|
||||
"SEND": "Invia",
|
||||
"SEND_AN_ALERT": "Invia un Avviso",
|
||||
"SEND_LIVE": "Invia in Diretta",
|
||||
"SERVICE": "Servizio",
|
||||
"SETTINGS": "Impostazioni",
|
||||
"SHOW_BACKGROUND": "Mostra lo Sfondo",
|
||||
"SHOW_BLACK": "Mostra il Nero",
|
||||
"SHOW_DESKTOP": "Mostra il Desktop",
|
||||
"SHOW_NOTES": "Mostra le Note",
|
||||
"SHOW_PRESENTATION": "Mostra la Presentazione",
|
||||
"SLIDES": "Diapositive",
|
||||
"SONG": "Canzone",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Il cambio di tema a livello di canzone non è supportato. Cambia il tuo livello di tema in Globale o Servizio",
|
||||
"STAGE": "Palco",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Aspetto del Palco e degli Accordi",
|
||||
"STAGE_VIEW": "Vista del Palco",
|
||||
"THEMES": "Temi",
|
||||
"THEME_LEVEL": "Livello del Tema",
|
||||
"THEME_OPTIONS": "Opzioni del Tema",
|
||||
"USER_NAME": "Nome Utente",
|
||||
"USER_INTERFACE": "Interfaccia Utente"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Aggiungi Elemento",
|
||||
"ADD_ITEM_TO_SERVICE": "Aggiungi Elemento al Servizio",
|
||||
"ADD_TO_SERVICE": "Aggiungi al Servizio",
|
||||
"ALERT": "Allarme",
|
||||
"ALERT_SUBMITTED": "Avviso Inviato",
|
||||
"ALERTS": "Avvisi",
|
||||
"BIBLE_VERSION": "Versione biblica",
|
||||
"CHANGE_DISPLAY_MODE": "Cambia Modalità di Visualizzazione",
|
||||
"CHORD_VIEW": "Vista degli Accordi",
|
||||
"CHORDS": "Accordi",
|
||||
"CONNECTED_TO_OPENLP": "Collegato a OpenLP",
|
||||
"DISCONNECTED": "Disconnesso",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Abilita i Grandi Pulsanti di Visualizzazione",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Abilita il Pannello di Commutazione Rapida",
|
||||
"FONT_SCALE": "Scala del Carattere",
|
||||
"GLOBAL": "Globale",
|
||||
"GO_BACK_TO_CONTROLLER": "Torna al Controller",
|
||||
"HIDE_NOTES": "Nascondi le Note",
|
||||
"LOGIN": "Accedi",
|
||||
"LOGIN_FAILED": "Accesso non riuscito",
|
||||
"LOGIN_SUCCEEDED": "Accesso effettuato con successo",
|
||||
"MAIN_VIEW": "Vista Principale",
|
||||
"NEXT_ITEM": "Prossimo Elemento",
|
||||
"NEXT_SLIDE": "Prossima Diapositiva",
|
||||
"NO_SEARCH_RESULTS": "Nessun risultato corrispondente alla tua ricerca è stato trovato",
|
||||
"NO_SERVICE_ITEMS": "Nessun Elemento di Servizio",
|
||||
"NO_SLIDE_ITEMS": "Nessun Elemento Diapositiva",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Elemento Precedente",
|
||||
"PREVIOUS_SLIDE": "Diapositiva Precedente",
|
||||
"SEARCH": "Cerca",
|
||||
"SEARCH_RESULTS": "Risultati della Ricerca",
|
||||
"SEARCH_TEXT": "Testo di Ricerca",
|
||||
"SEND": "Invia",
|
||||
"SEND_AN_ALERT": "Invia un Avviso",
|
||||
"SEND_LIVE": "Invia in Diretta",
|
||||
"SERVICE": "Servizio",
|
||||
"SETTINGS": "Impostazioni",
|
||||
"SHOW_BACKGROUND": "Mostra lo Sfondo",
|
||||
"SHOW_BLACK": "Mostra il Nero",
|
||||
"SHOW_DESKTOP": "Mostra il Desktop",
|
||||
"SHOW_NOTES": "Mostra le Note",
|
||||
"SHOW_PRESENTATION": "Mostra la Presentazione",
|
||||
"SLIDES": "Diapositive",
|
||||
"SONG": "Canzone",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Il cambio di tema a livello di canzone non è supportato. Cambia il tuo livello di tema in Globale o Servizio",
|
||||
"STAGE": "Palco",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Aspetto del Palco e degli Accordi",
|
||||
"STAGE_VIEW": "Vista del Palco",
|
||||
"THEMES": "Temi",
|
||||
"THEME_LEVEL": "Livello del Tema",
|
||||
"THEME_OPTIONS": "Opzioni del Tema",
|
||||
"USER_NAME": "Nome Utente",
|
||||
"USER_INTERFACE": "Interfaccia Utente"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Aggiungi Elemento",
|
||||
"ADD_ITEM_TO_SERVICE": "Aggiungi Elemento al Servizio",
|
||||
"ADD_TO_SERVICE": "Aggiungi al Servizio",
|
||||
"ALERT": "Allarme",
|
||||
"ALERT_SUBMITTED": "Avviso Inviato",
|
||||
"ALERTS": "Avvisi",
|
||||
"BIBLE_VERSION": "Versione biblica",
|
||||
"CHANGE_DISPLAY_MODE": "Cambia Modalità di Visualizzazione",
|
||||
"CHORD_VIEW": "Vista degli Accordi",
|
||||
"CHORDS": "Accordi",
|
||||
"CONNECTED_TO_OPENLP": "Collegato a OpenLP",
|
||||
"DISCONNECTED": "Disconnesso",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Abilita i Grandi Pulsanti di Visualizzazione",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Abilita il Pannello di Commutazione Rapida",
|
||||
"FONT_SCALE": "Scala del Carattere",
|
||||
"GLOBAL": "Globale",
|
||||
"GO_BACK_TO_CONTROLLER": "Torna al Controller",
|
||||
"HIDE_NOTES": "Nascondi le Note",
|
||||
"LOGIN": "Accedi",
|
||||
"LOGIN_FAILED": "Accesso non riuscito",
|
||||
"LOGIN_SUCCEEDED": "Accesso effettuato con successo",
|
||||
"MAIN_VIEW": "Vista Principale",
|
||||
"NEXT_ITEM": "Prossimo Elemento",
|
||||
"NEXT_SLIDE": "Prossima Diapositiva",
|
||||
"NO_SEARCH_RESULTS": "Nessun risultato corrispondente alla tua ricerca è stato trovato",
|
||||
"NO_SERVICE_ITEMS": "Nessun Elemento di Servizio",
|
||||
"NO_SLIDE_ITEMS": "Nessun Elemento Diapositiva",
|
||||
"PASSWORD": "Password",
|
||||
"PREVIOUS_ITEM": "Elemento Precedente",
|
||||
"PREVIOUS_SLIDE": "Diapositiva Precedente",
|
||||
"SEARCH": "Cerca",
|
||||
"SEARCH_RESULTS": "Risultati della Ricerca",
|
||||
"SEARCH_TEXT": "Testo di Ricerca",
|
||||
"SEND": "Invia",
|
||||
"SEND_AN_ALERT": "Invia un Avviso",
|
||||
"SEND_LIVE": "Invia in Diretta",
|
||||
"SERVICE": "Servizio",
|
||||
"SETTINGS": "Impostazioni",
|
||||
"SHOW_BACKGROUND": "Mostra lo Sfondo",
|
||||
"SHOW_BLACK": "Mostra il Nero",
|
||||
"SHOW_DESKTOP": "Mostra il Desktop",
|
||||
"SHOW_NOTES": "Mostra le Note",
|
||||
"SHOW_PRESENTATION": "Mostra la Presentazione",
|
||||
"SLIDES": "Diapositive",
|
||||
"SONG": "Canzone",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Il cambio di tema a livello di canzone non è supportato. Cambia il tuo livello di tema in Globale o Servizio",
|
||||
"STAGE": "Palco",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Aspetto del Palco e degli Accordi",
|
||||
"STAGE_VIEW": "Vista del Palco",
|
||||
"THEMES": "Temi",
|
||||
"THEME_LEVEL": "Livello del Tema",
|
||||
"THEME_OPTIONS": "Opzioni del Tema",
|
||||
"USER_NAME": "Nome Utente",
|
||||
"USER_INTERFACE": "Interfaccia Utente"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "アイテムを追加",
|
||||
"ADD_ITEM_TO_SERVICE": "サービスにアイテムを追加",
|
||||
"ADD_TO_SERVICE": "サービスに追加",
|
||||
"ALERT": "アラート",
|
||||
"ALERT_SUBMITTED": "アラート送信済み",
|
||||
"ALERTS": "アラート",
|
||||
"BIBLE_VERSION": "聖書版",
|
||||
"CHANGE_DISPLAY_MODE": "表示モードを変更",
|
||||
"CHORD_VIEW": "コード表示",
|
||||
"CHORDS": "コード",
|
||||
"CONNECTED_TO_OPENLP": "OpenLPに接続済み",
|
||||
"DISCONNECTED": "切断されました",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "大きな表示ボタンを有効にする",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "高速切り替えパネルを有効にする",
|
||||
"FONT_SCALE": "フォントスケール",
|
||||
"GLOBAL": "グローバル",
|
||||
"GO_BACK_TO_CONTROLLER": "コントローラーに戻る",
|
||||
"HIDE_NOTES": "ノートを非表示",
|
||||
"LOGIN": "ログイン",
|
||||
"LOGIN_FAILED": "ログインに失敗しました",
|
||||
"LOGIN_SUCCEEDED": "ログインに成功しました",
|
||||
"MAIN_VIEW": "メインビュー",
|
||||
"NEXT_ITEM": "次のアイテム",
|
||||
"NEXT_SLIDE": "次のスライド",
|
||||
"NO_SEARCH_RESULTS": "検索に一致する結果はありませんでした",
|
||||
"NO_SERVICE_ITEMS": "サービスアイテムはありません",
|
||||
"NO_SLIDE_ITEMS": "スライドアイテムはありません",
|
||||
"PASSWORD": "パスワード",
|
||||
"PREVIOUS_ITEM": "前のアイテム",
|
||||
"PREVIOUS_SLIDE": "前のスライド",
|
||||
"SEARCH": "検索",
|
||||
"SEARCH_RESULTS": "検索結果",
|
||||
"SEARCH_TEXT": "検索テキスト",
|
||||
"SEND": "送信",
|
||||
"SEND_AN_ALERT": "アラートを送信",
|
||||
"SEND_LIVE": "ライブを送信",
|
||||
"SERVICE": "サービス",
|
||||
"SETTINGS": "設定",
|
||||
"SHOW_BACKGROUND": "背景を表示",
|
||||
"SHOW_BLACK": "黒を表示",
|
||||
"SHOW_DESKTOP": "デスクトップを表示",
|
||||
"SHOW_NOTES": "ノートを表示",
|
||||
"SHOW_PRESENTATION": "プレゼンテーションを表示",
|
||||
"SLIDES": "スライド",
|
||||
"SONG": "歌",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "歌のテーマ変更はサポートされていません。テーマレベルをグローバルまたはサービスに変更してください",
|
||||
"STAGE": "ステージ",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "ステージとコードの外観",
|
||||
"STAGE_VIEW": "ステージビュー",
|
||||
"THEMES": "テーマ",
|
||||
"THEME_LEVEL": "テーマレベル",
|
||||
"THEME_OPTIONS": "テーマオプション",
|
||||
"USER_NAME": "ユーザー名",
|
||||
"USER_INTERFACE": "ユーザーインターフェース"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "항목 추가",
|
||||
"ADD_ITEM_TO_SERVICE": "서비스에 항목 추가",
|
||||
"ADD_TO_SERVICE": "서비스에 추가",
|
||||
"ALERT": "경고",
|
||||
"ALERT_SUBMITTED": "경고가 제출됨",
|
||||
"ALERTS": "경고",
|
||||
"BIBLE_VERSION": "성경 번역본",
|
||||
"CHANGE_DISPLAY_MODE": "디스플레이 모드 변경",
|
||||
"CHORD_VIEW": "코드 보기",
|
||||
"CHORDS": "코드",
|
||||
"CONNECTED_TO_OPENLP": "OpenLP에 연결됨",
|
||||
"DISCONNECTED": "연결이 끊어짐",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "큰 디스플레이 버튼 활성화",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "빠른 전환 패널 활성화",
|
||||
"FONT_SCALE": "글꼴 크기",
|
||||
"GLOBAL": " 전역",
|
||||
"GO_BACK_TO_CONTROLLER": "컨트롤러로 돌아가기",
|
||||
"HIDE_NOTES": "메모 숨기기",
|
||||
"LOGIN": "로그인",
|
||||
"LOGIN_FAILED": "로그인 실패",
|
||||
"LOGIN_SUCCEEDED": "성공적으로 로그인했습니다.",
|
||||
"MAIN_VIEW": "주 화면",
|
||||
"NEXT_ITEM": "다음 항목",
|
||||
"NEXT_SLIDE": "다음 슬라이드",
|
||||
"NO_SEARCH_RESULTS": "검색 결과가 없습니다",
|
||||
"NO_SERVICE_ITEMS": "서비스 항목 없음",
|
||||
"NO_SLIDE_ITEMS": "슬라이드 항목 없음",
|
||||
"PASSWORD": "비밀번호",
|
||||
"PREVIOUS_ITEM": " 이전 항목",
|
||||
"PREVIOUS_SLIDE": "이전 슬라이드",
|
||||
"SEARCH": "검색",
|
||||
"SEARCH_RESULTS": "검색 결과",
|
||||
"SEARCH_TEXT": "검색 텍스트",
|
||||
"SEND": "보내기",
|
||||
"SEND_AN_ALERT": "경고 보내기",
|
||||
"SEND_LIVE": "실시간으로 보내기",
|
||||
"SERVICE": "서비스",
|
||||
"SETTINGS": "설정",
|
||||
"SHOW_BACKGROUND": "배경 표시",
|
||||
"SHOW_BLACK": "검은색 표시",
|
||||
"SHOW_DESKTOP": "데스크톱 표시",
|
||||
"SHOW_NOTES": "메모 표시",
|
||||
"SHOW_PRESENTATION": "프레젠테이션 표시",
|
||||
"SLIDES": "슬라이드",
|
||||
"SONG": "노래",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "노래 수준의 테마 변경은 지원되지 않습니다. 테마 수준을 전역 또는 서비스로 변경하세요",
|
||||
"STAGE": "무대",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "무대와 코드 외형",
|
||||
"STAGE_VIEW": "무대 보기",
|
||||
"THEMES": "테마",
|
||||
"THEME_LEVEL": "테마 수준",
|
||||
"THEME_OPTIONS": "테마 옵션",
|
||||
"USER_NAME": "사용자 이름",
|
||||
"USER_INTERFACE": "사용자 인터페이스"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Pridėti Elementą",
|
||||
"ADD_ITEM_TO_SERVICE": "Pridėti Elementą prie Paslaugos",
|
||||
"ADD_TO_SERVICE": "Pridėti prie Paslaugos",
|
||||
"ALERT": "Įspėjimas",
|
||||
"ALERT_SUBMITTED": "Pateiktas Įspėjimas",
|
||||
"ALERTS": "Įspėjimai",
|
||||
"BIBLE_VERSION": "Biblijos versija",
|
||||
"CHANGE_DISPLAY_MODE": "Keisti Rodymo Režimą",
|
||||
"CHORD_VIEW": "Akordei",
|
||||
"CHORDS": "Akordei",
|
||||
"CONNECTED_TO_OPENLP": "Prisijungta prie OpenLP",
|
||||
"DISCONNECTED": "Atjungta",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Įjungti Didelius Rodymo Mygtukus",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Įjungti Greito Perjungimo Skydelį",
|
||||
"FONT_SCALE": "Šrifto Mastelis",
|
||||
"GLOBAL": "Visuotinis",
|
||||
"GO_BACK_TO_CONTROLLER": "Grįžti į Valdiklį",
|
||||
"HIDE_NOTES": "Slėpti Pastabas",
|
||||
"LOGIN": "Prisijungti",
|
||||
"LOGIN_FAILED": "Prisijungti nepavyko",
|
||||
"LOGIN_SUCCEEDED": "Sėkmingai prisijungęs",
|
||||
"MAIN_VIEW": "Pagrindinis Rodinys",
|
||||
"NEXT_ITEM": "Kitas Elementas",
|
||||
"NEXT_SLIDE": "Kitas Skaidrė",
|
||||
"NO_SEARCH_RESULTS": "Nerasta rezultatų, atitinkančių jūsų paiešką",
|
||||
"NO_SERVICE_ITEMS": "Nėra Paslaugų Elementų",
|
||||
"NO_SLIDE_ITEMS": "Nėra Skaidrių Elementų",
|
||||
"PASSWORD": "Slaptažodis",
|
||||
"PREVIOUS_ITEM": "Ankstesnis Elementas",
|
||||
"PREVIOUS_SLIDE": "Ankstesnė Skaidrė",
|
||||
"SEARCH": "Ieškoti",
|
||||
"SEARCH_RESULTS": "Paieškos Rezultata",
|
||||
"SEARCH_TEXT": "Paieškos Tekstas",
|
||||
"SEND": "Siųsti",
|
||||
"SEND_AN_ALERT": "Siųsti Įspėjimą",
|
||||
"SEND_LIVE": "Siųsti Tiesiogiai",
|
||||
"SERVICE": "Paslauga",
|
||||
"SETTINGS": "Nustatymai",
|
||||
"SHOW_BACKGROUND": "Rodyti Foną",
|
||||
"SHOW_BLACK": "Rodyti Juodai",
|
||||
"SHOW_DESKTOP": "Rodyti Darbalaukį",
|
||||
"SHOW_NOTES": "Rodyti Pastabas",
|
||||
"SHOW_PRESENTATION": "Rodyti Pristatymą",
|
||||
"SLIDES": "Skaidrės",
|
||||
"SONG": "Daina",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Dainos lygio temos keitimas nepalaikomas. Pakeiskite savo temos lygį į Visuotinį arba Paslaugos",
|
||||
"STAGE": "Scena",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Scenos ir Akordų Išvaizda",
|
||||
"STAGE_VIEW": "Scenos Rodinys",
|
||||
"THEMES": "Temos",
|
||||
"THEME_LEVEL": "Temos Lygis",
|
||||
"THEME_OPTIONS": "Temos Parinktys",
|
||||
"USER_NAME": "Vartotojo Vardas",
|
||||
"USER_INTERFACE": "Vartotojo Sąsaja"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Legg til Element",
|
||||
"ADD_ITEM_TO_SERVICE": "Legg til Element i Tjenesten",
|
||||
"ADD_TO_SERVICE": "Legg til i Tjenesten",
|
||||
"ALERT": "Varsel",
|
||||
"ALERT_SUBMITTED": "Varsel Sendt Inn",
|
||||
"ALERTS": "Varsler",
|
||||
"BIBLE_VERSION": "Bibelens versjon",
|
||||
"CHANGE_DISPLAY_MODE": "Endre Visningsmodus",
|
||||
"CHORD_VIEW": "Akkordvisning",
|
||||
"CHORDS": "Akkorder",
|
||||
"CONNECTED_TO_OPENLP": "Koblet til OpenLP",
|
||||
"DISCONNECTED": "Frakoblet",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Aktiver Store Visningsknapper",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Aktiver Rask Byttepanel",
|
||||
"FONT_SCALE": "Skriftstørrelse",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Gå Tilbake til Kontrolleren",
|
||||
"HIDE_NOTES": "Skjul Notater",
|
||||
"LOGIN": "Logg Inn",
|
||||
"LOGIN_FAILED": "Innlogging mislyktes",
|
||||
"LOGIN_SUCCEEDED": "Vellykket innlogging",
|
||||
"MAIN_VIEW": "Hovedvisning",
|
||||
"NEXT_ITEM": "Neste Element",
|
||||
"NEXT_SLIDE": "Neste Lysbilde",
|
||||
"NO_SEARCH_RESULTS": "Ingen resultater som samsvarer med søket ditt ble funnet",
|
||||
"NO_SERVICE_ITEMS": "Ingen Tjenesteelementer",
|
||||
"NO_SLIDE_ITEMS": "Ingen Lysbildeelementer",
|
||||
"PASSWORD": "Passord",
|
||||
"PREVIOUS_ITEM": "Forrige Element",
|
||||
"PREVIOUS_SLIDE": "Forrige Lysbilde",
|
||||
"SEARCH": "Søk",
|
||||
"SEARCH_RESULTS": "Søkeresultater",
|
||||
"SEARCH_TEXT": "Søketekst",
|
||||
"SEND": "Send",
|
||||
"SEND_AN_ALERT": "Send et varsel",
|
||||
"SEND_LIVE": "Send Direkte",
|
||||
"SERVICE": "Tjeneste",
|
||||
"SETTINGS": "Innstillinger",
|
||||
"SHOW_BACKGROUND": "Vis Bakgrunn",
|
||||
"SHOW_BLACK": "Vis Svart",
|
||||
"SHOW_DESKTOP": "Vis Skrivebord",
|
||||
"SHOW_NOTES": "Vis Notater",
|
||||
"SHOW_PRESENTATION": "Vis Presentasjon",
|
||||
"SLIDES": "Lysbilder",
|
||||
"SONG": "Sang",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Endring av tema på sangnivå støttes ikke. Endre temaet til Globalt eller Tjeneste",
|
||||
"STAGE": "Scene",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Utseende for Scene og Akkorder",
|
||||
"STAGE_VIEW": "Scenevisning",
|
||||
"THEMES": "Temaer",
|
||||
"THEME_LEVEL": "Temanivå",
|
||||
"THEME_OPTIONS": "Temaopsjoner",
|
||||
"USER_NAME": "Brukernavn",
|
||||
"USER_INTERFACE": "Brukergrensesnitt"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Voeg Item Toe",
|
||||
"ADD_ITEM_TO_SERVICE": "Voeg Item Toe aan Liturgie",
|
||||
"ADD_TO_SERVICE": "Voeg Toe aan Liturgie",
|
||||
"ALERT": "Waarschuwing",
|
||||
"ALERT_SUBMITTED": "Waarschuwing Verstuurd",
|
||||
"ALERTS": "Waarschuwingen",
|
||||
"BIBLE_VERSION": "Bijbelversie",
|
||||
"CHANGE_DISPLAY_MODE": "Wijzig Weergave",
|
||||
"CHORD_VIEW": "Akkoordenscherm",
|
||||
"CHORDS": "Akkoorden",
|
||||
"CONNECTED_TO_OPENLP": "Verbonden met OpenLP",
|
||||
"DISCONNECTED": "Niet Verbonden",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Activeer Grote Beeldschermknoppen",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Activeer Snel Wisselpaneel",
|
||||
"FONT_SCALE": "Schaal Lettertype",
|
||||
"GLOBAL": "Globaal",
|
||||
"GO_BACK_TO_CONTROLLER": "Ga Terug naar Controller",
|
||||
"HIDE_NOTES": "Verberg Notities",
|
||||
"LOGIN": "Log In",
|
||||
"LOGIN_FAILED": "Log in mislukt",
|
||||
"LOGIN_SUCCEEDED": "Succesvol ingelogd",
|
||||
"MAIN_VIEW": "Hoofdscherm",
|
||||
"NEXT_ITEM": "Volgend Item",
|
||||
"NEXT_SLIDE": "Volgende Slide",
|
||||
"NO_SEARCH_RESULTS": "Jouw zoekopdracht heeft geen resultaten opgeleverd",
|
||||
"NO_SERVICE_ITEMS": "Geen Liturgie Items",
|
||||
"NO_SLIDE_ITEMS": "Geen Slide Items",
|
||||
"PASSWORD": "Wachtwoord",
|
||||
"PREVIOUS_ITEM": "Vorig Item",
|
||||
"PREVIOUS_SLIDE": "Vorige Slide",
|
||||
"SEARCH": "Zoek",
|
||||
"SEARCH_RESULTS": "Zoekresultaten",
|
||||
"SEARCH_TEXT": "Zoektekst",
|
||||
"SEND": "Versturen",
|
||||
"SEND_AN_ALERT": "Stuur een Waarschuwing",
|
||||
"SEND_LIVE": "Ga Live",
|
||||
"SERVICE": "Liturgie",
|
||||
"SETTINGS": "Instellingen",
|
||||
"SHOW_BACKGROUND": "Toon Achtergrond",
|
||||
"SHOW_BLACK": "Toon Zwart",
|
||||
"SHOW_DESKTOP": "Toon Bureaublad",
|
||||
"SHOW_NOTES": "Toon Notities",
|
||||
"SHOW_PRESENTATION": "Toon Presentatie",
|
||||
"SLIDES": "Slides",
|
||||
"SONG": "Lied",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Themawijziging op liedniveau wordt niet ondersteund. Wijzig uw themaniveau naar Globaal of Service",
|
||||
"STAGE": "Podium",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Podium- en Akkoordenscherm",
|
||||
"STAGE_VIEW": "Podiumscherm",
|
||||
"THEMES": "Thema's",
|
||||
"THEME_LEVEL": "Thema Niveau",
|
||||
"THEME_OPTIONS": "Thema Opties",
|
||||
"USER_NAME": "Gebruikersnaam",
|
||||
"USER_INTERFACE": "Gebruikersinterface"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Dodaj Element",
|
||||
"ADD_ITEM_TO_SERVICE": "Dodaj Element do Usługi",
|
||||
"ADD_TO_SERVICE": "Dodaj do Usługi",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Przesłano Alert",
|
||||
"ALERTS": "Alerty",
|
||||
"BIBLE_VERSION": "Wersja Biblii",
|
||||
"CHANGE_DISPLAY_MODE": "Zmień Tryb Wyświetlania",
|
||||
"CHORD_VIEW": "Widok Akordów",
|
||||
"CHORDS": "Akordy",
|
||||
"CONNECTED_TO_OPENLP": "Połączono z OpenLP",
|
||||
"DISCONNECTED": "Rozłączono",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Włącz Duże Przyciski Wyświetlania",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Włącz Szybki Panel Przełączania",
|
||||
"FONT_SCALE": "Skala Czcionki",
|
||||
"GLOBAL": "Globalny",
|
||||
"GO_BACK_TO_CONTROLLER": "Wróć do Kontrolera",
|
||||
"HIDE_NOTES": "Ukryj Notatki",
|
||||
"LOGIN": "Zaloguj Się",
|
||||
"LOGIN_FAILED": "Logowanie nie powiodło się",
|
||||
"LOGIN_SUCCEEDED": "Pomyślnie zalogowano",
|
||||
"MAIN_VIEW": "Widok Główny",
|
||||
"NEXT_ITEM": "Następny Element",
|
||||
"NEXT_SLIDE": "Następny Slajd",
|
||||
"NO_SEARCH_RESULTS": "Nie znaleziono wyników pasujących do twojego wyszukiwania",
|
||||
"NO_SERVICE_ITEMS": "Brak Elementów Usługi",
|
||||
"NO_SLIDE_ITEMS": "Brak Elementów Slajdu",
|
||||
"PASSWORD": "Hasło",
|
||||
"PREVIOUS_ITEM": "Poprzedni Element",
|
||||
"PREVIOUS_SLIDE": "Poprzedni Slajd",
|
||||
"SEARCH": "Szukaj",
|
||||
"SEARCH_RESULTS": "Wyniki Wyszukiwania",
|
||||
"SEARCH_TEXT": "Tekst Wyszukiwania",
|
||||
"SEND": "Wyślij",
|
||||
"SEND_AN_ALERT": "Wyślij Alert",
|
||||
"SEND_LIVE": "Wyślij na Żywo",
|
||||
"SERVICE": "Usługa",
|
||||
"SETTINGS": "Ustawienia",
|
||||
"SHOW_BACKGROUND": "Pokaż Tło",
|
||||
"SHOW_BLACK": "Pokaż Czarny",
|
||||
"SHOW_DESKTOP": "Pokaż Pulpit",
|
||||
"SHOW_NOTES": "Pokaż Notatki",
|
||||
"SHOW_PRESENTATION": "Pokaż Prezentację",
|
||||
"SLIDES": "Slajdy",
|
||||
"SONG": "Piosenka",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Zmiana motywu na poziomie piosenki nie jest obsługiwana. Zmień poziom motywu na Globalny lub Usługi",
|
||||
"STAGE": "Scena",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Wygląd Sceny i Akordów",
|
||||
"STAGE_VIEW": "Widok Sceny",
|
||||
"THEMES": "Motywy",
|
||||
"THEME_LEVEL": "Poziom Motywu",
|
||||
"THEME_OPTIONS": "Opcje Motywu",
|
||||
"USER_NAME": "Nazwa Użytkownika",
|
||||
"USER_INTERFACE": "Interfejs Użytkownika"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Adicionar Item",
|
||||
"ADD_ITEM_TO_SERVICE": "Adicionar Item ao Serviço",
|
||||
"ADD_TO_SERVICE": "Adicionar ao Serviço",
|
||||
"ALERT": "Alerta",
|
||||
"ALERT_SUBMITTED": "Alerta Enviado",
|
||||
"ALERTS": "Alertas",
|
||||
"BIBLE_VERSION": "Versão da Bíblia",
|
||||
"CHANGE_DISPLAY_MODE": "Alterar Modo de Exibição",
|
||||
"CHORD_VIEW": "Visualização de Acordes",
|
||||
"CHORDS": "Acordes",
|
||||
"CONNECTED_TO_OPENLP": "Conectado ao OpenLP",
|
||||
"DISCONNECTED": "Desconectado",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Ativar Botões de Tela Grande",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Ativar Painel de Troca Rápida",
|
||||
"FONT_SCALE": "Escala de Fonte",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Voltar para o Controlador",
|
||||
"HIDE_NOTES": "Ocultar Notas",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_FAILED": "Falha no login",
|
||||
"LOGIN_SUCCEEDED": "Efetuado login com êxito",
|
||||
"MAIN_VIEW": "Visualização Principal",
|
||||
"NEXT_ITEM": "Próximo Item",
|
||||
"NEXT_SLIDE": "Próximo Slide",
|
||||
"NO_SEARCH_RESULTS": "Nenhum resultado correspondente à sua pesquisa foi encontrado",
|
||||
"NO_SERVICE_ITEMS": "Nenhum Item de Serviço",
|
||||
"NO_SLIDE_ITEMS": "Nenhum Item de Slide",
|
||||
"PASSWORD": "Senha",
|
||||
"PREVIOUS_ITEM": "Item Anterior",
|
||||
"PREVIOUS_SLIDE": "Slide Anterior",
|
||||
"SEARCH": "Buscar",
|
||||
"SEARCH_RESULTS": "Resultados da Busca",
|
||||
"SEARCH_TEXT": "Texto de Busca",
|
||||
"SEND": "Enviar",
|
||||
"SEND_AN_ALERT": "Enviar um Alerta",
|
||||
"SEND_LIVE": "Enviar ao Vivo",
|
||||
"SERVICE": "Serviço",
|
||||
"SETTINGS": "Configurações",
|
||||
"SHOW_BACKGROUND": "Mostrar Fundo",
|
||||
"SHOW_BLACK": "Mostrar Preto",
|
||||
"SHOW_DESKTOP": "Mostrar Área de Trabalho",
|
||||
"SHOW_NOTES": "Mostrar Notas",
|
||||
"SHOW_PRESENTATION": "Mostrar Apresentação",
|
||||
"SLIDES": "Slides",
|
||||
"SONG": "Música",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "A alteração de tema no nível da música não é suportada. Altere seu nível de tema para Global ou Serviço",
|
||||
"STAGE": "Palco",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Aparência do Palco e Acordes",
|
||||
"STAGE_VIEW": "Visualização do Palco",
|
||||
"THEMES": "Temas",
|
||||
"THEME_LEVEL": "Nível de Tema",
|
||||
"THEME_OPTIONS": "Opções de Tema",
|
||||
"USER_NAME": "Nome de Usuário",
|
||||
"USER_INTERFACE": "Interface do Usuário"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Adăugați Element",
|
||||
"ADD_ITEM_TO_SERVICE": "Adăugați Element la Serviciu",
|
||||
"ADD_TO_SERVICE": "Adăugați la Serviciu",
|
||||
"ALERT": "Alertă",
|
||||
"ALERT_SUBMITTED": "Alertă Transmisă",
|
||||
"ALERTS": "Alerte",
|
||||
"BIBLE_VERSION": "Versiunea Bibliei",
|
||||
"CHANGE_DISPLAY_MODE": "Schimbați Modul de Afișare",
|
||||
"CHORD_VIEW": "Vizualizare Acorduri",
|
||||
"CHORDS": "Acorduri",
|
||||
"CONNECTED_TO_OPENLP": "Conectat la OpenLP",
|
||||
"DISCONNECTED": "Deconectat",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Activați Butoanele de Afișare Mare",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Activați Panoul de Comutare Rapidă",
|
||||
"FONT_SCALE": "Scară Font",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Înapoi la Controler",
|
||||
"HIDE_NOTES": "Ascundeți Notele",
|
||||
"LOGIN": "Conectare",
|
||||
"LOGIN_FAILED": "Conectarea nu a reușit",
|
||||
"LOGIN_SUCCEEDED": "Conectat cu succes",
|
||||
"MAIN_VIEW": "Vizualizare Principală",
|
||||
"NEXT_ITEM": "Elementul Următo",
|
||||
"NEXT_SLIDE": "Diapozitivul Următo",
|
||||
"NO_SEARCH_RESULTS": "Nu s-au găsit rezultate care să corespundă căutării dvs",
|
||||
"NO_SERVICE_ITEMS": "Niciun Element de Serviciu",
|
||||
"NO_SLIDE_ITEMS": "Niciun Element de Diapozitiv",
|
||||
"PASSWORD": "Parolă",
|
||||
"PREVIOUS_ITEM": "Elementul Anterior",
|
||||
"PREVIOUS_SLIDE": "Diapozitivul Anterior",
|
||||
"SEARCH": "Căutare",
|
||||
"SEARCH_RESULTS": "Rezultatele Căutării",
|
||||
"SEARCH_TEXT": "Text de Căutare",
|
||||
"SEND": "Trimite",
|
||||
"SEND_AN_ALERT": "Trimiteți o Alertă",
|
||||
"SEND_LIVE": "Trimiteți în Direct",
|
||||
"SERVICE": "Serviciu",
|
||||
"SETTINGS": "Setări",
|
||||
"SHOW_BACKGROUND": "Afișați Fundalul",
|
||||
"SHOW_BLACK": "Afișați Negru",
|
||||
"SHOW_DESKTOP": "Afișați Desktopul",
|
||||
"SHOW_NOTES": "Afișați Notele",
|
||||
"SHOW_PRESENTATION": "Afișați Prezentarea",
|
||||
"SLIDES": "Diapozitive",
|
||||
"SONG": "Cântec",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Schimbarea temei la nivel de cântec nu este acceptată. Modificați nivelul temei la Global sau Serviciu",
|
||||
"STAGE": "Scenă",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Aspect Scenă și Acorduri",
|
||||
"STAGE_VIEW": "Vizualizare Scenă",
|
||||
"THEMES": "Teme",
|
||||
"THEME_LEVEL": "Nivel Temă",
|
||||
"THEME_OPTIONS": "Opțiuni Temă",
|
||||
"USER_NAME": "Nume Utilizator",
|
||||
"USER_INTERFACE": "Interfață Utilizator"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Добавить элемент",
|
||||
"ADD_ITEM_TO_SERVICE": "Добавить элемент в службу",
|
||||
"ADD_TO_SERVICE": "Добавить в службу",
|
||||
"ALERT": "Оповещение",
|
||||
"ALERT_SUBMITTED": "Оповещение отправлено",
|
||||
"ALERTS": "Оповещения",
|
||||
"BIBLE_VERSION": "Перевод Библии",
|
||||
"CHANGE_DISPLAY_MODE": "Изменить режим отображения",
|
||||
"CHORD_VIEW": "Просмотр аккордов",
|
||||
"CHORDS": "Аккорды",
|
||||
"CONNECTED_TO_OPENLP": "Подключено к OpenLP",
|
||||
"DISCONNECTED": "Отключено",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Включить большие кнопки отображения",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Включить панель быстрого переключения",
|
||||
"FONT_SCALE": "Масштаб шрифта",
|
||||
"GLOBAL": "Глобальный",
|
||||
"GO_BACK_TO_CONTROLLER": "Вернуться к контроллеру",
|
||||
"HIDE_NOTES": "Скрыть заметки",
|
||||
"LOGIN": "Войти",
|
||||
"LOGIN_FAILED": "Не удалось войти в систему",
|
||||
"LOGIN_SUCCEEDED": "Успешно вошел в систему",
|
||||
"MAIN_VIEW": "Основное представление",
|
||||
"NEXT_ITEM": "Следующий элемент",
|
||||
"NEXT_SLIDE": "Следующий слайд",
|
||||
"NO_SEARCH_RESULTS": "Не найдено результатов, соответствующих вашему запросу",
|
||||
"NO_SERVICE_ITEMS": "Нет элементов службы",
|
||||
"NO_SLIDE_ITEMS": "Нет элементов слайдов",
|
||||
"PASSWORD": "Пароль",
|
||||
"PREVIOUS_ITEM": "Предыдущий элемент",
|
||||
"PREVIOUS_SLIDE": "Предыдущий слайд",
|
||||
"SEARCH": "Поиск",
|
||||
"SEARCH_RESULTS": "Результаты поиска",
|
||||
"SEARCH_TEXT": "Текст поиска",
|
||||
"SEND": "Отправить",
|
||||
"SEND_AN_ALERT": "Отправить оповещение",
|
||||
"SEND_LIVE": "Отправить в прямом эфире",
|
||||
"SERVICE": "Служба",
|
||||
"SETTINGS": "Настройки",
|
||||
"SHOW_BACKGROUND": "Показать фон",
|
||||
"SHOW_BLACK": "Показать черный",
|
||||
"SHOW_DESKTOP": "Показать рабочий стол",
|
||||
"SHOW_NOTES": "Показать заметки",
|
||||
"SHOW_PRESENTATION": "Показать презентацию",
|
||||
"SLIDES": "Слайды",
|
||||
"SONG": "Песня",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Изменение темы на уровне песни не поддерживается. Измените уровень темы на Глобальный или Службу",
|
||||
"STAGE": "Сцена",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Внешний вид сцены и аккордов",
|
||||
"STAGE_VIEW": "Представление сцены",
|
||||
"THEMES": "Темы",
|
||||
"THEME_LEVEL": "Уровень темы",
|
||||
"THEME_OPTIONS": "Варианты темы",
|
||||
"USER_NAME": "Имя пользователя",
|
||||
"USER_INTERFACE": "Пользовательский интерфейс"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Pridať Položku",
|
||||
"ADD_ITEM_TO_SERVICE": "Pridať Položku do Služby",
|
||||
"ADD_TO_SERVICE": "Pridať do Služby",
|
||||
"ALERT": "Upozornenie",
|
||||
"ALERT_SUBMITTED": "Upozornenie Bolo Odoslané",
|
||||
"ALERTS": "Upozornenia",
|
||||
"BIBLE_VERSION": "Verzia Biblie",
|
||||
"CHANGE_DISPLAY_MODE": "Zmeniť Režim Zobrazenia",
|
||||
"CHORD_VIEW": "Zobrazenie Akordov",
|
||||
"CHORDS": "Akordy",
|
||||
"CONNECTED_TO_OPENLP": "Pripojené k OpenLP",
|
||||
"DISCONNECTED": "Odpojené",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Povoliť Veľké Tlačidlá na Displeji",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Povoliť Rýchle Prepínanie Panelov",
|
||||
"FONT_SCALE": "Veľkosť Písma",
|
||||
"GLOBAL": "Celosvetové",
|
||||
"GO_BACK_TO_CONTROLLER": "Ísť Späť na Ovládač",
|
||||
"HIDE_NOTES": "Skryť Poznámky",
|
||||
"LOGIN": "Prihlásenie",
|
||||
"LOGIN_FAILED": "Prihlásenie zlyhalo",
|
||||
"LOGIN_SUCCEEDED": "Úspešne prihlásené",
|
||||
"MAIN_VIEW": "Hlavný Pohľad",
|
||||
"NEXT_ITEM": "Ďalšia Položka",
|
||||
"NEXT_SLIDE": "Ďalší Snímok",
|
||||
"NO_SEARCH_RESULTS": "Nenašli sa žiadne výsledky zodpovedajúce vášmu vyhľadávaniu",
|
||||
"NO_SERVICE_ITEMS": "Žiadne Položky Služby",
|
||||
"NO_SLIDE_ITEMS": "Žiadne Položky Snímky",
|
||||
"PASSWORD": "Heslo",
|
||||
"PREVIOUS_ITEM": "Predchádzajúca Položka",
|
||||
"PREVIOUS_SLIDE": "Predchádzajúci Snímok",
|
||||
"SEARCH": "Vyhľadávanie",
|
||||
"SEARCH_RESULTS": "Výsledky Vyhľadávania",
|
||||
"SEARCH_TEXT": "Text Vyhľadávani",
|
||||
"SEND": "Odoslať",
|
||||
"SEND_AN_ALERT": "Odoslať Upozornenie",
|
||||
"SEND_LIVE": "Odoslať Naživo",
|
||||
"SERVICE": "Služba",
|
||||
"SETTINGS": "Nastavenia",
|
||||
"SHOW_BACKGROUND": "Zobraziť Pozadie",
|
||||
"SHOW_BLACK": "Zobraziť Čiernu Farbu",
|
||||
"SHOW_DESKTOP": "Zobraziť Plochu",
|
||||
"SHOW_NOTES": "Zobraziť Poznámky",
|
||||
"SHOW_PRESENTATION": "Zobraziť Prezentáci",
|
||||
"SLIDES": "Snímky",
|
||||
"SONG": "Pesnička",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Zmena témy na úrovni pesničky nie je podporovaná. Zmeňte úroveň témy na Celosvetovú alebo Službu",
|
||||
"STAGE": "Scéna",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Vzhľad Scény a Akordov",
|
||||
"STAGE_VIEW": "Pohľad na Scénu",
|
||||
"THEMES": "Témy",
|
||||
"THEME_LEVEL": "Úroveň Témy",
|
||||
"THEME_OPTIONS": "Možnosti Témy",
|
||||
"USER_NAME": "Meno Používateľa",
|
||||
"USER_INTERFACE": "Používateľské Rozhranie"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Dodaj Predmet",
|
||||
"ADD_ITEM_TO_SERVICE": "Dodaj Predmet v Spored",
|
||||
"ADD_TO_SERVICE": "Dodaj v Spored",
|
||||
"ALERT": "Opozorilo",
|
||||
"ALERT_SUBMITTED": "Predloženo Opozorilo",
|
||||
"ALERTS": "Opozorila",
|
||||
"BIBLE_VERSION": "Svetopisemska različica",
|
||||
"CHANGE_DISPLAY_MODE": "Spremeni Način Prikaza",
|
||||
"CHORD_VIEW": "Pogled s Sozvoki",
|
||||
"CHORDS": "Sozvoki",
|
||||
"CONNECTED_TO_OPENLP": "Povezano z OpenLP",
|
||||
"DISCONNECTED": "Nepovezan",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Omogoči Velike Gumbe",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Omogoči Priročno Vrstico",
|
||||
"FONT_SCALE": "Velikost Pisave",
|
||||
"GLOBAL": "Obče",
|
||||
"GO_BACK_TO_CONTROLLER": "Vrni se na Upravljalnik",
|
||||
"HIDE_NOTES": "Skrij Opombe",
|
||||
"LOGIN": "Prijava",
|
||||
"LOGIN_FAILED": "Prijava ni uspela",
|
||||
"LOGIN_SUCCEEDED": "Uspešno prijavljeni",
|
||||
"MAIN_VIEW": "Glavni Pogled",
|
||||
"NEXT_ITEM": "Naslednji Predmet",
|
||||
"NEXT_SLIDE": "Naslednja Prosojnica",
|
||||
"NO_SEARCH_RESULTS": "Ni rezultatov, ki bi se ujemali z vašim iskanjem",
|
||||
"NO_SERVICE_ITEMS": "Ni Predmetov Sporeda",
|
||||
"NO_SLIDE_ITEMS": "Ni Prosojnic",
|
||||
"PASSWORD": "Geslo",
|
||||
"PREVIOUS_ITEM": "Prejšnji Predmet",
|
||||
"PREVIOUS_SLIDE": "Prejšnja Prosojnica",
|
||||
"SEARCH": "Iskanje",
|
||||
"SEARCH_RESULTS": "Zadetki Iskanja",
|
||||
"SEARCH_TEXT": "Iskano Besedilo",
|
||||
"SEND": "Pošlji",
|
||||
"SEND_AN_ALERT": "Objavi Opozorilo",
|
||||
"SEND_LIVE": "Pošlji v Živo",
|
||||
"SERVICE": "Spored",
|
||||
"SETTINGS": "Nastavitve",
|
||||
"SHOW_BACKGROUND": "Prikaži Ozadje",
|
||||
"SHOW_BLACK": "Prikaži Črno",
|
||||
"SHOW_DESKTOP": "Prikaži Namizje",
|
||||
"SHOW_NOTES": "Prikaži Opombe",
|
||||
"SHOW_PRESENTATION": "Prikaži Predstavitve",
|
||||
"SLIDES": "Prosojnice",
|
||||
"SONG": "Pesem",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Spreminjanje teme na ravni pesmi ni podprto. Spremenite raven teme na Obče ali Spored",
|
||||
"STAGE": "Oder",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Videz Odrskega Pogleda in Sozvokov",
|
||||
"STAGE_VIEW": "Odrski Pogled",
|
||||
"THEMES": "Teme",
|
||||
"THEME_LEVEL": "Raven Teme",
|
||||
"THEME_OPTIONS": "Možnosti Teme",
|
||||
"USER_NAME": "Uporabniško Ime",
|
||||
"USER_INTERFACE": "Uporabniški Vmesnik"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Lägg till Objekt",
|
||||
"ADD_ITEM_TO_SERVICE": "Lägg till Objekt i Tjänsten",
|
||||
"ADD_TO_SERVICE": "Lägg till i Tjänsten",
|
||||
"ALERT": "Varning",
|
||||
"ALERT_SUBMITTED": "Avisering Skickad",
|
||||
"ALERTS": "Varningar",
|
||||
"BIBLE_VERSION": "Bibelöversättning",
|
||||
"CHANGE_DISPLAY_MODE": "Ändra Visningsläge",
|
||||
"CHORD_VIEW": "Ackordvy",
|
||||
"CHORDS": "Ackord",
|
||||
"CONNECTED_TO_OPENLP": "Ansluten till OpenLP",
|
||||
"DISCONNECTED": "Frånkopplad",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Aktivera Stora Visningsknappar",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Aktivera Sabbväxlingspanel",
|
||||
"FONT_SCALE": "Teckensnittsskala",
|
||||
"GLOBAL": "Global",
|
||||
"GO_BACK_TO_CONTROLLER": "Gå Tillbaka till Kontrollenhet",
|
||||
"HIDE_NOTES": "Dölj Anteckningar",
|
||||
"LOGIN": "Logga In",
|
||||
"LOGIN_FAILED": "Inloggningen misslyckades",
|
||||
"LOGIN_SUCCEEDED": "Har loggat in",
|
||||
"MAIN_VIEW": "Huvudvy",
|
||||
"NEXT_ITEM": "Nästa Objekt",
|
||||
"NEXT_SLIDE": "Nästa Bild",
|
||||
"NO_SEARCH_RESULTS": "Inga resultat som matchar din sökning hittades",
|
||||
"NO_SERVICE_ITEMS": "Inga Tjänsteobjekt",
|
||||
"NO_SLIDE_ITEMS": "Inga Bildobjekt",
|
||||
"PASSWORD": "Lösenord",
|
||||
"PREVIOUS_ITEM": "Föregående Objekt",
|
||||
"PREVIOUS_SLIDE": "Föregående Bild",
|
||||
"SEARCH": "Sök",
|
||||
"SEARCH_RESULTS": "Sökresultat",
|
||||
"SEARCH_TEXT": "Söktext",
|
||||
"SEND": "Skicka",
|
||||
"SEND_AN_ALERT": "Skicka en Varning",
|
||||
"SEND_LIVE": "Skicka Live",
|
||||
"SERVICE": "Tjänst",
|
||||
"SETTINGS": "Inställningar",
|
||||
"SHOW_BACKGROUND": "Visa Bakgrund",
|
||||
"SHOW_BLACK": "Visa Svart",
|
||||
"SHOW_DESKTOP": "Visa Skrivbord",
|
||||
"SHOW_NOTES": "Visa Anteckninga",
|
||||
"SHOW_PRESENTATION": "Visa Presentation",
|
||||
"SLIDES": "Bilder",
|
||||
"SONG": "Sång",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Ändring av tema på sångnivå stöds inte. Ändra ditt temanivå till Globalt eller Tjänst",
|
||||
"STAGE": "Scen",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Utseende För Scen och Ackord",
|
||||
"STAGE_VIEW": "Scenvy",
|
||||
"THEMES": "Teman",
|
||||
"THEME_LEVEL": "Temanivå",
|
||||
"THEME_OPTIONS": "Temaval",
|
||||
"USER_NAME": "Användarnamn",
|
||||
"USER_INTERFACE": "Användargränssnitt"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "பொருள் சேர்க்கவும்",
|
||||
"ADD_ITEM_TO_SERVICE": "பொருள் சேர்க்க சேவைக்கு",
|
||||
"ADD_TO_SERVICE": "சேவைக்கு சேர்க்கவும்",
|
||||
"ALERT": "எச்சரிக்கை",
|
||||
"ALERT_SUBMITTED": "எச்சரிக்கை சமர்ப்பிக்கப்பட்டது",
|
||||
"ALERTS": "எச்சரிக்கைகள்",
|
||||
"BIBLE_VERSION": "பைபிள் பதிப்பு",
|
||||
"CHANGE_DISPLAY_MODE": "காட்சி முறையை மாற்று",
|
||||
"CHORD_VIEW": "கார்டு காட்சி",
|
||||
"CHORDS": "கார்டுகள்",
|
||||
"CONNECTED_TO_OPENLP": "OpenLP க்கு இணைக்கப்பட்டது",
|
||||
"DISCONNECTED": "இணைக்கப்படவில்லை",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "பெரிய காட்சி பொத்தான்களை இயக்கு",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "விரைவு மாற்று பேனலை இயக்கு",
|
||||
"FONT_SCALE": "எழுத்துரு அளவு",
|
||||
"GLOBAL": "உலகளாவிய",
|
||||
"GO_BACK_TO_CONTROLLER": "கட்டுப்பாட்டிற்கு திரும்பு",
|
||||
"HIDE_NOTES": "குறிப்புகளை மறை",
|
||||
"LOGIN": "உள்நுழை",
|
||||
"LOGIN_FAILED": "உள்நுழைவு தோல்வியுற்றது",
|
||||
"LOGIN_SUCCEEDED": "வெற்றிகரமாக உள்நுழைந்தது",
|
||||
"MAIN_VIEW": "முக்கிய காட்சி",
|
||||
"NEXT_ITEM": "அடுத்த பொருள்",
|
||||
"NEXT_SLIDE": "அடுத்த ஸ்லைட்",
|
||||
"NO_SEARCH_RESULTS": "உங்கள் தேடலுக்கு பொருந்துவிக்கும் முடிவுகள் இல்லை",
|
||||
"NO_SERVICE_ITEMS": "சேவை பொருட்கள் இல்லை",
|
||||
"NO_SLIDE_ITEMS": "ஸ்லைட் பொருட்கள் இல்லை",
|
||||
"PASSWORD": "கடவுச்சொல்",
|
||||
"PREVIOUS_ITEM": "முந்திய பொருள்",
|
||||
"PREVIOUS_SLIDE": "முந்திய ஸ்லைட்",
|
||||
"SEARCH": "தேடு",
|
||||
"SEARCH_RESULTS": "தேடும் முடிவுகள்",
|
||||
"SEARCH_TEXT": "தேடும் உரை",
|
||||
"SEND": "அனுப்பு",
|
||||
"SEND_AN_ALERT": "ஒரு எச்சரிக்கை அனுப்பு",
|
||||
"SEND_LIVE": "நேரடி அனுப்பு",
|
||||
"SERVICE": "சேவை",
|
||||
"SETTINGS": "அமைப்புகள்",
|
||||
"SHOW_BACKGROUND": "பின்னணி காட்டு",
|
||||
"SHOW_BLACK": "கருப்பு காட்டு",
|
||||
"SHOW_DESKTOP": "டெஸ்க்டாப் காட்டு",
|
||||
"SHOW_NOTES": "குறிப்புகள் காட்டு",
|
||||
"SHOW_PRESENTATION": "பிரதிரூபம் காட்டு",
|
||||
"SLIDES": "செய்திகள்",
|
||||
"SONG": "பாடல்",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "பாடல் நிலை தீம் மாற்றம் ஆதரிக்கப்படவில்லை. உங்கள் தீம் நிலையை உலகளாவியம் அல்லது சேவைக்கு மாற்றுக",
|
||||
"STAGE": "மேடை",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "மேடை மற்றும் கார்டுகள் பார்வை",
|
||||
"STAGE_VIEW": "மேடை காட்டு",
|
||||
"THEMES": "தீம்கள்",
|
||||
"THEME_LEVEL": "தீம் நிலை",
|
||||
"THEME_OPTIONS": "தீம் விருப்பங்கள்",
|
||||
"USER_NAME": "பயனர் பெயர்",
|
||||
"USER_INTERFACE": "பயனர் இடைமுகம்"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "เพิ่มรายการ",
|
||||
"ADD_ITEM_TO_SERVICE": "เพิ่มรายการในบริการ",
|
||||
"ADD_TO_SERVICE": "เพิ่มในบริการ",
|
||||
"ALERT": "แจ้งเตือน",
|
||||
"ALERT_SUBMITTED": "ส่งการแจ้งเตือนแล้ว",
|
||||
"ALERTS": "การแจ้งเตือน",
|
||||
"BIBLE_VERSION": "ฉบับพระคัมภีร์",
|
||||
"CHANGE_DISPLAY_MODE": "เปลี่ยนโหมดการแสดงผล",
|
||||
"CHORD_VIEW": "มุมมองคอร์ด",
|
||||
"CHORDS": "คอร์ด",
|
||||
"CONNECTED_TO_OPENLP": " เชื่อมต่อกับ OpenLP",
|
||||
"DISCONNECTED": "ตัดการเชื่อมต่อ",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "เปิดใช้งานปุ่มแสดงผลขนาดใหญ่",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "เปิดใช้งานแผงสลับรวดเร็ว",
|
||||
"FONT_SCALE": "ขนาดตัวอักษร",
|
||||
"GLOBAL": "ระดับโลก",
|
||||
"GO_BACK_TO_CONTROLLER": "กลับไปที่ควบคุม",
|
||||
"HIDE_NOTES": "ซ่อนบันทึก",
|
||||
"LOGIN": "เข้าสู่ระบบ",
|
||||
"LOGIN_FAILED": "การเข้าสู่ระบบล้มเหลว",
|
||||
"LOGIN_SUCCEEDED": "เข้าสู่ระบบสําเร็จ",
|
||||
"MAIN_VIEW": "มุมมองหลัก",
|
||||
"NEXT_ITEM": " รายการถัดไป",
|
||||
"NEXT_SLIDE": "ภาพนิ่งถัดไป",
|
||||
"NO_SEARCH_RESULTS": "ไม่พบผลลัพธ์ตรงกับการค้นหาของคุณ",
|
||||
"NO_SERVICE_ITEMS": "ไม่มีรายการบริการ",
|
||||
"NO_SLIDE_ITEMS": "ไม่มีรายการภาพนิ่ง",
|
||||
"PASSWORD": "รหัสผ่าน",
|
||||
"PREVIOUS_ITEM": "รายการก่อนหน้า",
|
||||
"PREVIOUS_SLIDE": "ภาพนิ่งก่อนหน้า",
|
||||
"SEARCH": "ค้นหา",
|
||||
"SEARCH_RESULTS": "ผลลัพธ์การค้นหา",
|
||||
"SEARCH_TEXT": "ข้อความค้นหา",
|
||||
"SEND": "ส่ง",
|
||||
"SEND_AN_ALERT": "ส่งแจ้งเตือน",
|
||||
"SEND_LIVE": "ส่งสด",
|
||||
"SERVICE": "บริการ",
|
||||
"SETTINGS": "การตั้งค่า",
|
||||
"SHOW_BACKGROUND": "แสดงพื้นหลัง",
|
||||
"SHOW_BLACK": "แสดงสีดำ",
|
||||
"SHOW_DESKTOP": "แสดงหน้าจอเดสก์ท็อป",
|
||||
"SHOW_NOTES": "แสดงบันทึก",
|
||||
"SHOW_PRESENTATION": "แสดงงานนำเสนอ",
|
||||
"SLIDES": "ภาพนิ่ง",
|
||||
"SONG": "เพลง",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "ไม่รองรับการเปลี่ยนธีมระดับเพลง โปรดเปลี่ยนระดับธีมเป็นระดับโลกหรือบริการ",
|
||||
"STAGE": "เวที",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "ลักษณะเวทีและคอร์ด",
|
||||
"STAGE_VIEW": "มุมมองเวที",
|
||||
"THEMES": "ธีม",
|
||||
"THEME_LEVEL": "ระดับธีม",
|
||||
"THEME_OPTIONS": "ตัวเลือกธีม",
|
||||
"USER_NAME": "ชื่อผู้ใช้",
|
||||
"USER_INTERFACE": "ส่วนติดต่อผู้ใช้"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "Thêm mục",
|
||||
"ADD_ITEM_TO_SERVICE": "Thêm mục vào Dịch vụ",
|
||||
"ADD_TO_SERVICE": "Thêm vào Dịch vụ",
|
||||
"ALERT": "Cảnh báo",
|
||||
"ALERT_SUBMITTED": "Cảnh báo đã Gửi",
|
||||
"ALERTS": "Các cảnh báo",
|
||||
"BIBLE_VERSION": "Phiên bản Kinh Thánh",
|
||||
"CHANGE_DISPLAY_MODE": "Thay đổi Chế độ Hiển thị",
|
||||
"CHORD_VIEW": "Xem hợp âm",
|
||||
"CHORDS": "Hợp âm",
|
||||
"CONNECTED_TO_OPENLP": "Đã kết nối với OpenLP",
|
||||
"DISCONNECTED": "Đã ngắt kết nối",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "Bật nút Hiển thị lớn",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "Bật bảng chuyển đổi nhanh",
|
||||
"FONT_SCALE": "Tỷ lệ phông chữ",
|
||||
"GLOBAL": "Toàn cầu",
|
||||
"GO_BACK_TO_CONTROLLER": "Quay lại Bộ điều khiển",
|
||||
"HIDE_NOTES": "Ẩn ghi chú",
|
||||
"LOGIN": "Đăng nhập",
|
||||
"LOGIN_FAILED": "Đăng nhập không thành công",
|
||||
"LOGIN_SUCCEEDED": "Đăng nhập thành công",
|
||||
"MAIN_VIEW": "Chế độ xem chính",
|
||||
"NEXT_ITEM": "Mục tiếp theo",
|
||||
"NEXT_SLIDE": "Trang tiếp theo",
|
||||
"NO_SEARCH_RESULTS": "Không tìm thấy kết quả phù hợp với tìm kiếm của bạn",
|
||||
"NO_SERVICE_ITEMS": "Không có mục Dịch vụ",
|
||||
"NO_SLIDE_ITEMS": "Không có mục Trang",
|
||||
"PASSWORD": "Mật khẩu",
|
||||
"PREVIOUS_ITEM": "Mục trước",
|
||||
"PREVIOUS_SLIDE": "Trang trước",
|
||||
"SEARCH": "Tìm kiếm",
|
||||
"SEARCH_RESULTS": "Kết quả tìm kiếm",
|
||||
"SEARCH_TEXT": "Văn bản tìm kiếm",
|
||||
"SEND": "Gửi",
|
||||
"SEND_AN_ALERT": "Gửi cảnh báo",
|
||||
"SEND_LIVE": "Gửi trực tiếp",
|
||||
"SERVICE": "Dịch vụ",
|
||||
"SETTINGS": "Cài đặt",
|
||||
"SHOW_BACKGROUND": "Hiển thị nền",
|
||||
"SHOW_BLACK": "Hiển thị đen",
|
||||
"SHOW_DESKTOP": "Hiển thị màn hình",
|
||||
"SHOW_NOTES": "Hiển thị ghi chú",
|
||||
"SHOW_PRESENTATION": "Hiển thị bài thuyết trình",
|
||||
"SLIDES": "Trang",
|
||||
"SONG": "Bài hát",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "Không hỗ trợ thay đổi chủ đề cấp bài hát. Hãy chuyển chủ đề của bạn sang cấp Toàn cầu hoặc Dịch vụ",
|
||||
"STAGE": "Sân khấu",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "Giao diện Sân khấu và Hợp âm",
|
||||
"STAGE_VIEW": "Chế độ xem sân khấu",
|
||||
"THEMES": "Chủ đề",
|
||||
"THEME_LEVEL": "Cấp chủ đề",
|
||||
"THEME_OPTIONS": "Tùy chọn chủ đề",
|
||||
"USER_NAME": "Tên người dùn",
|
||||
"USER_INTERFACE": "Giao diện người dùng"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "添加项目",
|
||||
"ADD_ITEM_TO_SERVICE": "添加项目到服务",
|
||||
"ADD_TO_SERVICE": "添加到服务",
|
||||
"ALERT": "警报",
|
||||
"ALERT_SUBMITTED": "警报已提交",
|
||||
"ALERTS": "警报",
|
||||
"BIBLE_VERSION": "圣经版本",
|
||||
"CHANGE_DISPLAY_MODE": "更改显示模式",
|
||||
"CHORD_VIEW": "和弦视图",
|
||||
"CHORDS": "和弦",
|
||||
"CONNECTED_TO_OPENLP": "已连接到 OpenLP",
|
||||
"DISCONNECTED": "断开连接",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "启用大显示按钮",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "启用快速切换面板",
|
||||
"FONT_SCALE": "字体缩放",
|
||||
"GLOBAL": "全局",
|
||||
"GO_BACK_TO_CONTROLLER": "返回到控制器",
|
||||
"HIDE_NOTES": "隐藏注释",
|
||||
"LOGIN": "登录",
|
||||
"LOGIN_FAILED": "登录失败",
|
||||
"LOGIN_SUCCEEDED": "登录成功",
|
||||
"MAIN_VIEW": "主视图",
|
||||
"NEXT_ITEM": "下一个项目",
|
||||
"NEXT_SLIDE": "下一张幻灯片",
|
||||
"NO_SEARCH_RESULTS": "没有找到与您的搜索匹配的结果",
|
||||
"NO_SERVICE_ITEMS": "没有服务项目",
|
||||
"NO_SLIDE_ITEMS": "没有幻灯片项目",
|
||||
"PASSWORD": "密码",
|
||||
"PREVIOUS_ITEM": "上一个项目",
|
||||
"PREVIOUS_SLIDE": "上一张幻灯片",
|
||||
"SEARCH": "搜索",
|
||||
"SEARCH_RESULTS": "搜索结果",
|
||||
"SEARCH_TEXT": "搜索文本",
|
||||
"SEND": "发送",
|
||||
"SEND_AN_ALERT": "发送警报",
|
||||
"SEND_LIVE": "发送实时",
|
||||
"SERVICE": "服务",
|
||||
"SETTINGS": "设置",
|
||||
"SHOW_BACKGROUND": "显示背景",
|
||||
"SHOW_BLACK": "显示黑色",
|
||||
"SHOW_DESKTOP": "显示桌面",
|
||||
"SHOW_NOTES": "显示注释",
|
||||
"SHOW_PRESENTATION": "显示演示文稿",
|
||||
"SLIDES": "幻灯片",
|
||||
"SONG": "歌曲",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "不支持歌曲级别的主题更改。请将您的主题级别更改为全局或服务",
|
||||
"STAGE": "舞台",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "舞台和和弦外观",
|
||||
"STAGE_VIEW": "舞台视图",
|
||||
"THEMES": "主题",
|
||||
"THEME_LEVEL": "主题级别",
|
||||
"THEME_OPTIONS": "主题选项",
|
||||
"USER_NAME": "用户名",
|
||||
"USER_INTERFACE": "用户界面"
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ADD_ITEM": "新增項目",
|
||||
"ADD_ITEM_TO_SERVICE": "新增項目至服務",
|
||||
"ADD_TO_SERVICE": "新增至服務",
|
||||
"ALERT": "警示",
|
||||
"ALERT_SUBMITTED": "警報已提交",
|
||||
"ALERTS": "警示訊息",
|
||||
"BIBLE_VERSION": "聖經版本",
|
||||
"CHANGE_DISPLAY_MODE": "變更顯示模式",
|
||||
"CHORD_VIEW": "和弦檢視",
|
||||
"CHORDS": "和弦",
|
||||
"CONNECTED_TO_OPENLP": "已連接至 OpenLP",
|
||||
"DISCONNECTED": "已斷開連線",
|
||||
"ENABLE_BIG_DISPLAY_BUTTONS": "啟用大型顯示按鈕",
|
||||
"ENABLE_FAST_SWITCHING_PANEL": "啟用快速切換面板",
|
||||
"FONT_SCALE": "字型縮放",
|
||||
"GLOBAL": "全域",
|
||||
"GO_BACK_TO_CONTROLLER": "返回控制器",
|
||||
"HIDE_NOTES": "隱藏筆記",
|
||||
"LOGIN": "登入",
|
||||
"LOGIN_FAILED": "登錄失敗",
|
||||
"LOGIN_SUCCEEDED": "登錄成功",
|
||||
"MAIN_VIEW": "主畫面",
|
||||
"NEXT_ITEM": "下一項目",
|
||||
"NEXT_SLIDE": "下一張投影片",
|
||||
"NO_SEARCH_RESULTS": "找不到符合您搜尋的結果",
|
||||
"NO_SERVICE_ITEMS": "無服務項目",
|
||||
"NO_SLIDE_ITEMS": "無投影片項目",
|
||||
"PASSWORD": "密碼",
|
||||
"PREVIOUS_ITEM": "上一項目",
|
||||
"PREVIOUS_SLIDE": "上一張投影片",
|
||||
"SEARCH": "搜尋",
|
||||
"SEARCH_RESULTS": "搜尋結果",
|
||||
"SEARCH_TEXT": "搜尋文字",
|
||||
"SEND": "傳送",
|
||||
"SEND_AN_ALERT": "傳送警示",
|
||||
"SEND_LIVE": "傳送直播",
|
||||
"SERVICE": "服務",
|
||||
"SETTINGS": "設定",
|
||||
"SHOW_BACKGROUND": "顯示背",
|
||||
"SHOW_BLACK": "顯示黑色",
|
||||
"SHOW_DESKTOP": "顯示桌面",
|
||||
"SHOW_NOTES": "顯示筆記",
|
||||
"SHOW_PRESENTATION": "顯示簡報",
|
||||
"SLIDES": "投影片",
|
||||
"SONG": "歌曲",
|
||||
"SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED": "不支援歌曲層級主題變更。請將您的主題層級更改為全域或服務",
|
||||
"STAGE": "舞台",
|
||||
"STAGE_AND_CHORDS_APPEARANCE": "舞台和和弦外觀",
|
||||
"STAGE_VIEW": "舞台檢視",
|
||||
"THEMES": "主題",
|
||||
"THEME_LEVEL": "主題層級",
|
||||
"THEME_OPTIONS": "主題選項",
|
||||
"USER_NAME": "使用者名稱",
|
||||
"USER_INTERFACE": "使用者介面"
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 96 KiB |
|
@ -0,0 +1,32 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>OpenLP Remote</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
<style>
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>
|
||||
<p>
|
||||
Your browser is NOT supported.
|
||||
</p>
|
||||
<p>
|
||||
Please download and install an older version of Web Remote from <a href="https://get.openlp.org/remote/">here</a>.
|
||||
</p>
|
||||
<p>
|
||||
To install go to the directory "remotes" in your OpenLP data folder.<br />
|
||||
The location of the data folder can be found under the advanced settings of OpenLP.
|
||||
</p>
|
||||
<p>
|
||||
Unzip the contents of the downloaded Web Remote file to that directory overwriting everything in it.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue