mirror of
https://github.com/YunoHost/yunohost-admin.git
synced 2024-09-03 20:06:15 +02:00
Merge from stretch-unstable
This commit is contained in:
commit
3deb80f2f2
61 changed files with 3760 additions and 1006 deletions
78
CONTRIBUTORS.md
Normal file
78
CONTRIBUTORS.md
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
YunoHost web administration contributors
|
||||||
|
========================================
|
||||||
|
|
||||||
|
YunoHost is built and maintained by the YunoHost project community.
|
||||||
|
Everyone is encouraged to submit issues and changes, and to contribute in other ways -- see https://yunohost.org/contribute to find out how.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
Initial YunoHost web administration was built by Kload, for YunoHost v2.
|
||||||
|
|
||||||
|
Most of code was written by opi, with help of numerous contributors.
|
||||||
|
|
||||||
|
Translation is made by a bunch of lovely people over the world.
|
||||||
|
|
||||||
|
We would like to thank anyone who ever helped the YunoHost project, and especially the web administration project <3
|
||||||
|
|
||||||
|
|
||||||
|
YunoHost Administration Contributors
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
- opi
|
||||||
|
- Kload
|
||||||
|
- Jérôme Lebleu
|
||||||
|
- Julien 'ju' Malik
|
||||||
|
- Hugo Roy
|
||||||
|
- Laurent 'Bram' Peuch
|
||||||
|
- Valentin 'zamentur' / 'ljf' Grimaud
|
||||||
|
- M5oul
|
||||||
|
- thardev
|
||||||
|
|
||||||
|
|
||||||
|
YunoHost Administration Translators
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
If you want to help translation, please visit https://translate.yunohost.org/projects/yunohost/yunohost-admin/
|
||||||
|
|
||||||
|
### Dutch
|
||||||
|
|
||||||
|
- DUBWiSE
|
||||||
|
- dosch
|
||||||
|
|
||||||
|
### English
|
||||||
|
|
||||||
|
- Bugsbane
|
||||||
|
|
||||||
|
### French
|
||||||
|
|
||||||
|
- Étienne Deparis
|
||||||
|
- Jean-Baptiste Holcroft
|
||||||
|
- Jérôme Lebleu
|
||||||
|
- ljf (zamentur)
|
||||||
|
- opi
|
||||||
|
|
||||||
|
### German
|
||||||
|
|
||||||
|
- david.bartke
|
||||||
|
- Felix Bartels
|
||||||
|
- Fabian Gruber (burst3r)
|
||||||
|
|
||||||
|
### Hindi
|
||||||
|
|
||||||
|
- Anmol
|
||||||
|
|
||||||
|
### Italian
|
||||||
|
|
||||||
|
- bricabrac
|
||||||
|
- danneso
|
||||||
|
- Thomas Bille
|
||||||
|
- Vincent
|
||||||
|
|
||||||
|
### Portuguese
|
||||||
|
|
||||||
|
- Deleted User
|
||||||
|
|
||||||
|
### Spanish
|
||||||
|
|
||||||
|
- Juanu
|
||||||
|
- rokaz
|
32
README.md
32
README.md
|
@ -1,45 +1,37 @@
|
||||||
# YunoHost Admin
|
# YunoHost Admin
|
||||||
|
|
||||||
JS client for YunoHost API
|
[YunoHost](https://yunohost.org) administration web interface (JS client for the API).
|
||||||
|
|
||||||
**Please report issues here** (no registration needed):
|
This client is a part of the YunoHost projet, and can not be installed directly. Please visit YunoHost website for [installation instructions](https://yunohost.org/install).
|
||||||
https://dev.yunohost.org/projects/yunohost/issues
|
|
||||||
|
|
||||||
|
## Bug tracker
|
||||||
|
|
||||||
## Installation
|
Please report issues on the [YunoHost Bugtracker](https://github.com/YunoHost/issues).
|
||||||
|
|
||||||
This client is a part of the YunoHost projet, and can not be installed
|
## Translate
|
||||||
directly. Please visit [YunoHost website](https://yunohost.org) for
|
|
||||||
more information.
|
[![Translation status](https://translate.yunohost.org/widgets/yunohost/-/287x66-white.png)](https://translate.yunohost.org/engage/yunohost/?utm_source=widget)
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Feel free to improve the plugin and send us a pull request.
|
Feel free to improve the plugin and send us a pull request.
|
||||||
|
|
||||||
We use gulp to compile Less files and minify the JavaScript.
|
We use `gulp` to compile Less files and minify the JavaScript. Assuming [nodejs](http://nodejs.org/) is installed, you can install dependencies and run a build with:
|
||||||
Assuming [nodejs](http://nodejs.org/) is installed, you can run a
|
|
||||||
build with:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd src
|
cd src
|
||||||
npm install
|
npm install
|
||||||
npm install -g bower
|
npm run build
|
||||||
bower install
|
|
||||||
npm install -g gulp
|
|
||||||
gulp build
|
|
||||||
```
|
```
|
||||||
Alternatively you can pas the `--dev` option to gulp which improve building
|
|
||||||
speed by bypassing compression tasks.
|
|
||||||
|
|
||||||
On a YunoHost instance, the web admin files are located at
|
Alternatively you can run `npm run build-dev` which improves building speed by bypassing compression tasks.
|
||||||
`/usr/share/yunohost/admin`.
|
|
||||||
|
On a YunoHost instance, the web admin files are located at `/usr/share/yunohost/admin`.
|
||||||
|
|
||||||
**Note:** The `.ms` - moustache - files are cached by the browser. You have to
|
**Note:** The `.ms` - moustache - files are cached by the browser. You have to
|
||||||
reach them manually some times you modify them. (e.g. go to
|
reach them manually some times you modify them. (e.g. go to
|
||||||
https://example.com/yunohost/admin/views/domain/domain_list.ms)
|
https://example.com/yunohost/admin/views/domain/domain_list.ms)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
* Bootstrap 3.3.6
|
* Bootstrap 3.3.6
|
||||||
|
|
280
debian/changelog
vendored
280
debian/changelog
vendored
|
@ -1,3 +1,283 @@
|
||||||
|
yunohost-admin (3.0.0) stable; urgency=low
|
||||||
|
|
||||||
|
Merging with jessie's branches
|
||||||
|
Releasing as stable
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Fri, 17 Jun 2018 03:38:00 +0000
|
||||||
|
|
||||||
|
yunohost-admin (3.0.0~beta1.3) testing; urgency=low
|
||||||
|
|
||||||
|
Merging with jessie's branches
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Sat, 16 Jun 2018 00:36:00 +0000
|
||||||
|
|
||||||
|
yunohost-admin (3.0.0~beta1.2) testing; urgency=low
|
||||||
|
|
||||||
|
Merging with jessie's branches
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Fri, 15 Jun 2018 23:23:00 +0000
|
||||||
|
|
||||||
|
yunohost-admin (3.0.0~beta1.1) testing; urgency=low
|
||||||
|
|
||||||
|
Merging with jessie's branches
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Mon, 28 May 2018 02:43:00 +0000
|
||||||
|
|
||||||
|
yunohost-admin (3.0.0~beta1) testing; urgency=low
|
||||||
|
|
||||||
|
Beta release for Stretch
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 03 May 2018 03:04:45 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.14) stable; urgency=low
|
||||||
|
|
||||||
|
* Improved Occitan, French, Portuguese, Arabic translations
|
||||||
|
* Release as stable
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Sun, 17 Jun 2018 01:33:02 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.13.2) testing; urgency=low
|
||||||
|
|
||||||
|
* [fix] Display active/inactive in service page instead of running/exited/dead
|
||||||
|
* [fix] Remove "experimental" warning for the backup
|
||||||
|
* [fix] Fix a bug in backup restore
|
||||||
|
|
||||||
|
Contributors : Bram and Aleks
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Fri, 15 Jun 2018 20:15:00 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.13.1) testing; urgency=low
|
||||||
|
|
||||||
|
* [i18n] Improve French, Portuguese, Arabic, Occitan translations
|
||||||
|
* [enh] Improve services page following changes in the core (#191)
|
||||||
|
|
||||||
|
Contributors : Bram, ButterflyOfFire, Jibec, itxtoledo, Quent-in
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Mon, 28 May 2018 02:43:00 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.13) testing; urgency=low
|
||||||
|
|
||||||
|
* [enh] Add interface for migrations (#186)
|
||||||
|
* [i18n] Improve French translation
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Sun, 06 May 2018 23:16:15 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.12) stable; urgency=low
|
||||||
|
|
||||||
|
* Bumping version number for stable release
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Sun, 06 May 2018 16:47:05 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.11) testing; urgency=low
|
||||||
|
|
||||||
|
* [i18n] Updated translations for French, Arabic, Dutch, Occitan and Spanish
|
||||||
|
* [fix] Version datastructure has changed
|
||||||
|
|
||||||
|
Thanks to all contributors (Jibec, Bram, Moul, ButterflyOfFire, syl, Matthieu, Quenti, bjarkan) <3 !
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Tue, 01 May 2018 23:20:54 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.7) stable; urgency=low
|
||||||
|
|
||||||
|
* [fix] version data structure has changed
|
||||||
|
* Releasing as stable
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 18 Jan 2018 17:48:20 -0500
|
||||||
|
|
||||||
|
yunohost-admin (2.7.6) testing; urgency=low
|
||||||
|
|
||||||
|
Major changes:
|
||||||
|
|
||||||
|
* [enh] Diagnose and display warning and instruction to fix Meltdown vulnerability
|
||||||
|
* [enh] Add app change URL feature
|
||||||
|
* [enh] Add app change label feature
|
||||||
|
|
||||||
|
Misc fixes/improvements:
|
||||||
|
|
||||||
|
* [enh] display stable/testing/unstable in footer
|
||||||
|
* [i18n] Improve French translation
|
||||||
|
|
||||||
|
Thanks to all contributors (JimboeJoe, Bram, Jibec, ewilly) ! <3
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Tue, 16 Jan 2018 17:45:08 -0500
|
||||||
|
|
||||||
|
yunohost-admin (2.7.5) stable; urgency=low
|
||||||
|
|
||||||
|
(Bumping version number for stable release)
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Sat, 02 Dec 2017 12:34:45 -0500
|
||||||
|
|
||||||
|
yunohost-admin (2.7.4) testing; urgency=low
|
||||||
|
|
||||||
|
* [i18n] Improve French. German translations
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Tue, 28 Nov 2017 18:58:04 -0500
|
||||||
|
|
||||||
|
yunohost-admin (2.7.3) testing; urgency=low
|
||||||
|
|
||||||
|
* [i18n] Improve french translation (#170)
|
||||||
|
* [fix] Add "OK" in translatable strings (#171)
|
||||||
|
* [enh] Be able to upgrade single apps (#172)
|
||||||
|
* [enh] Reboot/shutdown from admin interface (#173)
|
||||||
|
|
||||||
|
Thanks to all contributors <3 ! (opi, ljf, ariasuni, Jibec)
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 12 Oct 2017 16:51:24 -0400
|
||||||
|
|
||||||
|
yunohost-admin (2.7.2) stable; urgency=low
|
||||||
|
|
||||||
|
Releasing as stable
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Tue, 22 Aug 2017 21:36:35 -0400
|
||||||
|
|
||||||
|
yunohost-admin (2.7.1) testing; urgency=low
|
||||||
|
|
||||||
|
[ Alexandre Aubin ]
|
||||||
|
* [fix] Tell user that domain dns-conf shows a recommendation only
|
||||||
|
|
||||||
|
[ Translations ]
|
||||||
|
* Added translation using Weblate (Russian) (Evgeniy Ozhiganov)
|
||||||
|
* [i18n] Translated using Weblate (Esperanto) (MCMic)
|
||||||
|
|
||||||
|
Thanks to all contributors (MCMic, Aleks, Ozhiganov) <3 !
|
||||||
|
|
||||||
|
-- Laurent Peuch <cortex@worlddomination.be> Sat, 19 Aug 2017 22:43:15 +0000
|
||||||
|
|
||||||
|
yunohost-admin (2.7.0) testing; urgency=low
|
||||||
|
|
||||||
|
* [enh] Variable assignment code cleanup. (#161)
|
||||||
|
* [fix] Friendlier and more meaningful 'error 500' (#166)
|
||||||
|
* [i18n] Started Russian translation (#167)
|
||||||
|
|
||||||
|
Thanks to all contributors (opi, Aleks, Ozhiganov) <3 !
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Mon, 07 Aug 2017 12:49:55 -0400
|
||||||
|
|
||||||
|
yunohost-admin (2.6.2) stable; urgency=low
|
||||||
|
|
||||||
|
## Minor fix
|
||||||
|
|
||||||
|
* 'hooks' key is now 'system' in backup info (#165)
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Wed, 26 Jul 2017 12:09:03 -0400
|
||||||
|
|
||||||
|
yunohost-admin (2.6.1) stable; urgency=low
|
||||||
|
|
||||||
|
Major changes since 2.6.0
|
||||||
|
-----------
|
||||||
|
|
||||||
|
* [enh] Manage appslists. #875 (#158)
|
||||||
|
* [i18n] Update Spanish, German and French translations
|
||||||
|
|
||||||
|
Thanks to all contributors : opi, moul, Jibec, Juanu and franzos
|
||||||
|
|
||||||
|
-- ljf <ljf+yunohost@grimaud.me> Wed, 21 Jun 2017 18:26:35 -0400
|
||||||
|
|
||||||
|
yunohost-admin (2.6.0) testing; urgency=low
|
||||||
|
|
||||||
|
## Major improvements
|
||||||
|
|
||||||
|
* [enh] Display help text from manifest during app installation. (#152)
|
||||||
|
* [fix] Show version only when connected
|
||||||
|
|
||||||
|
## Other improvements
|
||||||
|
|
||||||
|
* [fix]ÂGuess API's baseurl is store is empty.
|
||||||
|
* [fix] Avoid empty whitespace for the first line of the logs display (#151)
|
||||||
|
* [fix] Set document root permission during package install. (#156)
|
||||||
|
* [fix] Cleanup app_list_install template (unused code since 66dbcf50).
|
||||||
|
* [fix] Label for custom app url.
|
||||||
|
* [fix] Misc typos, messages, README improvements,
|
||||||
|
* [love] Add missing contributors & translators
|
||||||
|
* Updated translations for German, Spanish, Portuguese, Italian, French
|
||||||
|
|
||||||
|
Thanks to all contributors (opi, Bram, thardev) and translators ! <3
|
||||||
|
|
||||||
|
-- Alexandre Aubin <alex.aubin@mailoo.org> Mon, 24 Apr 2017 13:06:50 -0400
|
||||||
|
|
||||||
|
yunohost-admin (2.5.1) stable; urgency=low
|
||||||
|
|
||||||
|
[ ljf ]
|
||||||
|
* [fix] Avoid incomprehensible info about quota (#640)
|
||||||
|
|
||||||
|
[ Juanu ]
|
||||||
|
* [i18n] Translated using Weblate (Spanish)
|
||||||
|
|
||||||
|
[ Laurent Peuch ]
|
||||||
|
* [enh] add empty json file for breton translation
|
||||||
|
|
||||||
|
[ opi ]
|
||||||
|
* [enh][love] Create CONTRIBUTORS.md file. (#140)
|
||||||
|
|
||||||
|
[ Moul ]
|
||||||
|
* [enh] readme: add translation badge status.
|
||||||
|
|
||||||
|
[ Jean-Baptiste Holcroft ]
|
||||||
|
* [i18n] Translated using Weblate (French)
|
||||||
|
|
||||||
|
-- opi <opi@zeropi.net> Thu, 02 Feb 2017 11:33:16 +0100
|
||||||
|
|
||||||
|
yunohost-admin (2.5.0) testing; urgency=low
|
||||||
|
|
||||||
|
dattaz and opi
|
||||||
|
* Add noscript tag
|
||||||
|
* Update alert when javascript is not enable
|
||||||
|
|
||||||
|
Alexandre Aubin
|
||||||
|
* Let's encrypt web interface
|
||||||
|
|
||||||
|
Updated translations: French (jibec), Hindi (Anmol) and Italian (Thomas Bille).
|
||||||
|
|
||||||
|
Thanks to Anmol, dattaz, opi, jibec, Moul and Thomas Bille for your contributions <3
|
||||||
|
|
||||||
|
-- Laurent Peuch <cortex@worlddomination.be> Mon, 12 Dec 2016 21:32:09 +0100
|
||||||
|
|
||||||
|
yunohost-admin (2.4.2) stable; urgency=low
|
||||||
|
|
||||||
|
[ Lars-Magnus Skog ]
|
||||||
|
* simplify install and build
|
||||||
|
|
||||||
|
[ opi ]
|
||||||
|
* [fix] Remove useless 'move' CSS class.
|
||||||
|
* [fix] Prevent empty space before footer.
|
||||||
|
* [fix] No need to resize body on every content update.
|
||||||
|
* [enh] Cleanup app view() helper.
|
||||||
|
* [enh] Add 'watch' npm script.
|
||||||
|
* [enh] Be more explicit on npm command.
|
||||||
|
* [enh] Display YNH version in footer. Need body padding improvments. #316
|
||||||
|
* [enh] Allow key/value choices in manifest arguments.
|
||||||
|
|
||||||
|
[ Jérome Lebleu ]
|
||||||
|
* [fix] Run npm/gulp at build in Debian rules
|
||||||
|
|
||||||
|
[ Laurent Peuch ]
|
||||||
|
* [enh] add empty file for hindie to enable it in weblate
|
||||||
|
* [fix] api correctly returns boolean value now
|
||||||
|
|
||||||
|
-- Laurent Peuch <cortex@worlddomination.be> Sun, 14 Aug 2016 19:02:25 +0200
|
||||||
|
|
||||||
|
yunohost-admin (2.4.1) stable; urgency=low
|
||||||
|
|
||||||
|
[ Juanu ]
|
||||||
|
* [i18n] Translated using Weblate (Spanish)
|
||||||
|
|
||||||
|
[ Vincent ]
|
||||||
|
* [i18n] Translated using Weblate (Italian)
|
||||||
|
|
||||||
|
[ Bugsbane ]
|
||||||
|
* [i18n] Translated using Weblate (English)
|
||||||
|
|
||||||
|
[ Jean-Baptiste ]
|
||||||
|
* [i18n] Translated using Weblate (French)
|
||||||
|
|
||||||
|
[ opi ]
|
||||||
|
* [fix] Icon position.
|
||||||
|
* [fix] Allow checkbox to be unchecked even if default is true.
|
||||||
|
* [fix] Do not escape html attributes on app install form.
|
||||||
|
* [enh] Display manifest example as help text.
|
||||||
|
|
||||||
|
-- opi <opi@zeropi.net> Fri, 15 Jul 2016 15:27:49 +0200
|
||||||
|
|
||||||
yunohost-admin (2.4.0.1) stable; urgency=low
|
yunohost-admin (2.4.0.1) stable; urgency=low
|
||||||
|
|
||||||
[ Jérôme Lebleu ]
|
[ Jérôme Lebleu ]
|
||||||
|
|
2
debian/control
vendored
2
debian/control
vendored
|
@ -12,7 +12,7 @@ Architecture: all
|
||||||
Conflicts: yunohost-apps-admin
|
Conflicts: yunohost-apps-admin
|
||||||
Replaces: yunohost-apps-admin
|
Replaces: yunohost-apps-admin
|
||||||
Depends: ${misc:Depends}
|
Depends: ${misc:Depends}
|
||||||
, yunohost (>= 2.3.6)
|
, yunohost (>= 2.7.6)
|
||||||
Description: web administration interface for yunohost
|
Description: web administration interface for yunohost
|
||||||
YunoHost aims to make self-hosting accessible to everyone. It configures
|
YunoHost aims to make self-hosting accessible to everyone. It configures
|
||||||
an email, Web and IM server alongside a LDAP base. It also provides
|
an email, Web and IM server alongside a LDAP base. It also provides
|
||||||
|
|
3
debian/postinst
vendored
3
debian/postinst
vendored
|
@ -7,6 +7,9 @@ do_configure() {
|
||||||
if [ ! -f /usr/share/yunohost/admin/ca.crt ]; then
|
if [ ! -f /usr/share/yunohost/admin/ca.crt ]; then
|
||||||
ln -s /etc/ssl/certs/ca-yunohost_crt.pem /usr/share/yunohost/admin/ca.crt
|
ln -s /etc/ssl/certs/ca-yunohost_crt.pem /usr/share/yunohost/admin/ca.crt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set document root permissions
|
||||||
|
chown -R root:root /usr/share/yunohost/admin
|
||||||
}
|
}
|
||||||
|
|
||||||
# summary of how this script can be called:
|
# summary of how this script can be called:
|
||||||
|
|
7
debian/rules
vendored
7
debian/rules
vendored
|
@ -14,16 +14,13 @@ TMPDIR = $$(pwd)/debian/yunohost-admin
|
||||||
%:
|
%:
|
||||||
dh $@
|
dh $@
|
||||||
|
|
||||||
override_dh_auto_install:
|
override_dh_auto_build:
|
||||||
# Replace VERSION with current package version to prevent web browser
|
# Replace VERSION with current package version to prevent web browser
|
||||||
# to serve old css/js files
|
# to serve old css/js files
|
||||||
sed -i 's/VERSION/$(DEBVERS)/g' src/index.html
|
sed -i 's/VERSION/$(DEBVERS)/g' src/index.html
|
||||||
|
|
||||||
# Run npm/bower/gulp
|
# Run npm/bower/gulp
|
||||||
# For some unknown reason, the postinstall scripts in package.json cannot be run, and triggers this error :
|
cd src ; npm --progress false --loglevel warn --color false install
|
||||||
# "npm WARN cannot run in wd yunohost-admin@ bower install && gulp build (wd=/build/path)"
|
|
||||||
cd src ; npm --progress false --loglevel warn --color false --unsafe-perm install
|
|
||||||
cd src ; node_modules/bower/bin/bower install --allow-root
|
|
||||||
cd src ; node_modules/gulp/bin/gulp.js build
|
cd src ; node_modules/gulp/bin/gulp.js build
|
||||||
|
|
||||||
override_dh_clean:
|
override_dh_clean:
|
||||||
|
|
|
@ -96,10 +96,6 @@ button {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.move {
|
|
||||||
transition: margin-left 0.2s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.placehold {
|
.placehold {
|
||||||
font-size: 0.0001em;
|
font-size: 0.0001em;
|
||||||
color: transparent;
|
color: transparent;
|
||||||
|
@ -196,12 +192,18 @@ button {
|
||||||
width: 200%;
|
width: 200%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 150px;
|
min-height: 150px;
|
||||||
|
transition: margin-left 0.15s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
#slideBack, #slideTo, #main {
|
#slideBack, #slideTo, #main {
|
||||||
.block;
|
.block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#slideTo, #slideBack {
|
||||||
|
// Force left & right pane height to 1px (prevent empty space before footer).
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main part of the app
|
* The main part of the app
|
||||||
*
|
*
|
||||||
|
@ -215,6 +217,26 @@ button {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Page footer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
.page-footer {
|
||||||
|
.clearfix;
|
||||||
|
.make-row(12);
|
||||||
|
margin: 20px 0;
|
||||||
|
padding-top: 20px;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
color: #999;
|
||||||
|
font-size: 0.9em;
|
||||||
|
text-align: right;
|
||||||
|
a {
|
||||||
|
color: #666;
|
||||||
|
&:hover,
|
||||||
|
&:focus {text-decoration: underline;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The pop up dialog
|
* The pop up dialog
|
||||||
*
|
*
|
||||||
|
@ -334,10 +356,16 @@ div.br {
|
||||||
background-position: center top;
|
background-position: center top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.help-block {
|
.help-block--link {
|
||||||
text-align: right;
|
float: right;
|
||||||
|
margin-left: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.help-block--help {
|
||||||
|
margin: 0 0 5px 0;
|
||||||
|
}
|
||||||
|
.help-block--example {}
|
||||||
|
|
||||||
.quota-help-block {
|
.quota-help-block {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
|
@ -495,6 +523,7 @@ input[type='radio'].nice-radio {
|
||||||
/** App install form **/
|
/** App install form **/
|
||||||
.form-app-install {
|
.form-app-install {
|
||||||
.form-group {
|
.form-group {
|
||||||
|
margin-bottom: 25px;
|
||||||
label {cursor: pointer;}
|
label {cursor: pointer;}
|
||||||
}
|
}
|
||||||
.form-control {
|
.form-control {
|
||||||
|
|
|
@ -51,6 +51,7 @@ gulp.task('js', function() {
|
||||||
'js/yunohost/main.js',
|
'js/yunohost/main.js',
|
||||||
'js/yunohost/helpers.js',
|
'js/yunohost/helpers.js',
|
||||||
'js/yunohost/filters.js',
|
'js/yunohost/filters.js',
|
||||||
|
'js/yunohost/events.js',
|
||||||
'js/yunohost/controllers/*.js',
|
'js/yunohost/controllers/*.js',
|
||||||
])
|
])
|
||||||
.pipe(gulpif(isProduction, uglify()))
|
.pipe(gulpif(isProduction, uglify()))
|
||||||
|
|
|
@ -49,11 +49,20 @@
|
||||||
<a class="slide" href="#/">
|
<a class="slide" href="#/">
|
||||||
<span class="ajax-loader" data-y18n="loading">loading…</span>
|
<span class="ajax-loader" data-y18n="loading">loading…</span>
|
||||||
</a>
|
</a>
|
||||||
|
<noscript>
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<p> <strong> Warning ! </strong> You must enable Javascript to view this page properly. </p>
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="slideTo" style="display: none; z-index: 100;"></div>
|
<div id="slideTo" style="display: none; z-index: 100;"></div>
|
||||||
|
|
||||||
</div><!--/#slider-container-->
|
</div><!--/#slider-container-->
|
||||||
|
|
||||||
|
<footer class="page-footer">
|
||||||
|
<p id="yunohost-version"></p>
|
||||||
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="modal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
<div id="modal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
// List installed apps
|
// List installed apps
|
||||||
app.get('#/apps', function (c) {
|
app.get('#/apps', function (c) {
|
||||||
c.api('/apps?installed', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
c.api('/apps?installed', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
||||||
apps = data['apps'];
|
var apps = data['apps'];
|
||||||
c.arraySortById(apps);
|
c.arraySortById(apps);
|
||||||
c.view('app/app_list', {apps: apps});
|
c.view('app/app_list', {apps: apps});
|
||||||
});
|
});
|
||||||
|
@ -21,10 +21,10 @@
|
||||||
app.get('#/apps/install', function (c) {
|
app.get('#/apps/install', function (c) {
|
||||||
c.api('/apps', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
c.api('/apps', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
||||||
c.api('/apps?raw', function(dataraw) { // http://api.yunohost.org/#!/app/app_list_get_8
|
c.api('/apps?raw', function(dataraw) { // http://api.yunohost.org/#!/app/app_list_get_8
|
||||||
apps = [];
|
var apps = [];
|
||||||
$.each(data['apps'], function(k, v) {
|
$.each(data['apps'], function(k, v) {
|
||||||
// Keep only uninstalled apps, or multi-instance apps
|
// Keep only uninstalled apps, or multi-instance apps
|
||||||
if ((!v['installed'] || dataraw[v['id']].manifest.multi_instance == "true") && !v['id'].match(/__[0-9]{1,5}$/)) {
|
if ((!v['installed'] || dataraw[v['id']].manifest.multi_instance) && !v['id'].match(/__[0-9]{1,5}$/)) {
|
||||||
// Check app source
|
// Check app source
|
||||||
dataraw[v['id']]['official'] = (dataraw[v['id']]['repository'] == 'yunohost');
|
dataraw[v['id']]['official'] = (dataraw[v['id']]['repository'] == 'yunohost');
|
||||||
|
|
||||||
|
@ -40,14 +40,96 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// List available apps lists
|
||||||
|
app.get('#/apps/lists', function (c) {
|
||||||
|
c.api('/appslists', function(data) {
|
||||||
|
list = [];
|
||||||
|
var has_community_list = false;
|
||||||
|
$.each(data, function(listname, listinfo) {
|
||||||
|
list.push({
|
||||||
|
'name': listname,
|
||||||
|
'url': listinfo['url'],
|
||||||
|
'lastUpdate': listinfo['lastUpdate']
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check for community list
|
||||||
|
if (listname == 'community' || listinfo['url'] == 'https://app.yunohost.org/community.json') {
|
||||||
|
has_community_list = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
c.view('app/app_appslists_list', {
|
||||||
|
appslists: list,
|
||||||
|
has_community_list: has_community_list
|
||||||
|
});
|
||||||
|
}, 'GET');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add a new apps list
|
||||||
|
app.post('#/apps/lists', function (c) {
|
||||||
|
list = {
|
||||||
|
'name' : c.params['appslist_name'],
|
||||||
|
'url' : c.params['appslist_url']
|
||||||
|
}
|
||||||
|
|
||||||
|
c.api('/appslists', function(data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/apps/lists/' + list.name);
|
||||||
|
}, 'PUT', list);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show appslist info and operations
|
||||||
|
app.get('#/apps/lists/:appslist', function (c) {
|
||||||
|
c.api('/appslists', function(data) {
|
||||||
|
if (typeof data[c.params['appslist']] !== 'undefined') {
|
||||||
|
list = {
|
||||||
|
'name' : c.params['appslist'],
|
||||||
|
'url': data[c.params['appslist']]['url'],
|
||||||
|
'lastUpdate': data[c.params['appslist']]['lastUpdate'],
|
||||||
|
'removable' : (c.params['appslist'] !== 'yunohost') ? true : false // Do not remove default apps list
|
||||||
|
};
|
||||||
|
c.view('app/app_appslists_info', {appslist: list});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c.flash('warning', y18n.t('appslists_unknown_list', [c.params['appslist']]));
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/apps/lists');
|
||||||
|
}
|
||||||
|
}, 'GET');
|
||||||
|
});
|
||||||
|
|
||||||
// Refresh available apps list
|
// Refresh available apps list
|
||||||
app.get('#/apps/refresh', function (c) {
|
app.get('#/apps/lists/refresh', function (c) {
|
||||||
c.api('/appslists', function(data) { // http://api.yunohost.org/#!/app/app_fetchlist_put_5
|
c.api('/appslists', function(data) {
|
||||||
// c.redirect(store.get('path'));
|
// c.redirect(store.get('path'));
|
||||||
c.redirect('#/apps/install');
|
c.redirect('#/apps/install');
|
||||||
}, 'PUT');
|
}, 'PUT');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Refresh specific apps list
|
||||||
|
app.get('#/apps/lists/:appslist/refresh', function (c) {
|
||||||
|
c.api('/appslists', function(data) {
|
||||||
|
c.redirect('#/apps/lists');
|
||||||
|
}, 'PUT', {'name' : c.params['appslist']});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove apps list
|
||||||
|
app.get('#/apps/lists/:appslist/remove', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('appslist'),
|
||||||
|
y18n.t('appslists_confirm_remove', [c.params['app']]),
|
||||||
|
function() {
|
||||||
|
c.api('/appslists', function() {
|
||||||
|
c.redirect('#/apps/lists');
|
||||||
|
}, 'DELETE', {'name' : c.params['appslist']});
|
||||||
|
},
|
||||||
|
function() {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/apps/lists/'+ c.params['appslist']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
// Get app information
|
// Get app information
|
||||||
app.get('#/apps/:app', function (c) {
|
app.get('#/apps/:app', function (c) {
|
||||||
c.api('/apps/'+c.params['app']+'?raw', function(data) { // http://api.yunohost.org/#!/app/app_info_get_9
|
c.api('/apps/'+c.params['app']+'?raw', function(data) { // http://api.yunohost.org/#!/app/app_info_get_9
|
||||||
|
@ -61,7 +143,7 @@
|
||||||
;
|
;
|
||||||
|
|
||||||
// Multi Instance settings
|
// Multi Instance settings
|
||||||
data.manifest.multi_instance = (data.manifest.multi_instance == 'true') ? y18n.t('yes') : y18n.t('no');
|
data.manifest.multi_instance = data.manifest.multi_instance ? y18n.t('yes') : y18n.t('no');
|
||||||
|
|
||||||
// Installation date
|
// Installation date
|
||||||
var d = new Date(data.settings.install_time * 1000);
|
var d = new Date(data.settings.install_time * 1000);
|
||||||
|
@ -87,7 +169,7 @@
|
||||||
|
|
||||||
// Helper function that build app installation form
|
// Helper function that build app installation form
|
||||||
app.helper('appInstallForm', function(appId, manifest, params) {
|
app.helper('appInstallForm', function(appId, manifest, params) {
|
||||||
data = {
|
var data = {
|
||||||
id: appId,
|
id: appId,
|
||||||
manifest: manifest
|
manifest: manifest
|
||||||
};
|
};
|
||||||
|
@ -100,17 +182,42 @@
|
||||||
data.manifest.arguments.install[k].inputType = 'text';
|
data.manifest.arguments.install[k].inputType = 'text';
|
||||||
data.manifest.arguments.install[k].required = (typeof v.optional !== 'undefined' && v.optional == "true") ? '' : 'required';
|
data.manifest.arguments.install[k].required = (typeof v.optional !== 'undefined' && v.optional == "true") ? '' : 'required';
|
||||||
data.manifest.arguments.install[k].attributes = "";
|
data.manifest.arguments.install[k].attributes = "";
|
||||||
|
data.manifest.arguments.install[k].helpText = "";
|
||||||
|
data.manifest.arguments.install[k].helpLink = "";
|
||||||
|
|
||||||
|
|
||||||
|
// Multilingual label
|
||||||
|
data.manifest.arguments.install[k].label = (typeof data.manifest.arguments.install[k].ask[y18n.locale] !== 'undefined') ?
|
||||||
|
data.manifest.arguments.install[k].ask[y18n.locale] :
|
||||||
|
data.manifest.arguments.install[k].ask['en']
|
||||||
|
;
|
||||||
|
|
||||||
|
// Multilingual help text
|
||||||
|
if (typeof data.manifest.arguments.install[k].help !== 'undefined') {
|
||||||
|
data.manifest.arguments.install[k].helpText = (typeof data.manifest.arguments.install[k].help[y18n.locale] !== 'undefined') ?
|
||||||
|
data.manifest.arguments.install[k].help[y18n.locale] :
|
||||||
|
data.manifest.arguments.install[k].help['en']
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
// Input with choices becomes select list
|
// Input with choices becomes select list
|
||||||
if (typeof data.manifest.arguments.install[k].choices !== 'undefined') {
|
if (typeof data.manifest.arguments.install[k].choices !== 'undefined') {
|
||||||
// Update choices values with key and checked data
|
// Update choices values with key and checked data
|
||||||
|
var choices = []
|
||||||
$.each(data.manifest.arguments.install[k].choices, function(ck, cv){
|
$.each(data.manifest.arguments.install[k].choices, function(ck, cv){
|
||||||
data.manifest.arguments.install[k].choices[ck] = {
|
// Non key/value choices have numeric key, that we don't want.
|
||||||
value: cv,
|
if (typeof ck == "number") {
|
||||||
|
// Key is Value in this case.
|
||||||
|
ck = cv;
|
||||||
|
}
|
||||||
|
|
||||||
|
choices.push({
|
||||||
|
value: ck,
|
||||||
label: cv,
|
label: cv,
|
||||||
selected: (cv == data.manifest.arguments.install[k].default) ? true : false,
|
selected: (ck == data.manifest.arguments.install[k].default) ? true : false,
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
data.manifest.arguments.install[k].choices = choices;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special case for domain input.
|
// Special case for domain input.
|
||||||
|
@ -124,7 +231,9 @@
|
||||||
selected: false
|
selected: false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
data.manifest.arguments.install[k].help = "<a href='#/domains'>"+y18n.t('manage_domains')+"</a>";
|
|
||||||
|
// Custom help link
|
||||||
|
data.manifest.arguments.install[k].helpLink += "<a href='#/domains'>"+y18n.t('manage_domains')+"</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special case for admin / user input.
|
// Special case for admin / user input.
|
||||||
|
@ -138,7 +247,9 @@
|
||||||
selected: false
|
selected: false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
data.manifest.arguments.install[k].help = "<a href='#/users'>"+y18n.t('manage_users')+"</a>";
|
|
||||||
|
// Custom help link
|
||||||
|
data.manifest.arguments.install[k].helpLink += "<a href='#/users'>"+y18n.t('manage_users')+"</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'app' type input display a list of available apps
|
// 'app' type input display a list of available apps
|
||||||
|
@ -151,7 +262,9 @@
|
||||||
selected: false
|
selected: false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
data.manifest.arguments.install[k].help = "<a href='#/apps'>"+y18n.t('manage_apps')+"</a>";
|
|
||||||
|
// Custom help link
|
||||||
|
data.manifest.arguments.install[k].helpLink += "<a href='#/apps'>"+y18n.t('manage_apps')+"</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Boolean fields
|
// Boolean fields
|
||||||
|
@ -170,6 +283,15 @@
|
||||||
|
|
||||||
// Checkbox should not be required to be unchecked
|
// Checkbox should not be required to be unchecked
|
||||||
data.manifest.arguments.install[k].required = '';
|
data.manifest.arguments.install[k].required = '';
|
||||||
|
|
||||||
|
// Clone a hidden input with empty value
|
||||||
|
// https://stackoverflow.com/questions/476426/submit-an-html-form-with-empty-checkboxes
|
||||||
|
var inputClone = {
|
||||||
|
name : data.manifest.arguments.install[k].name,
|
||||||
|
inputType : 'hidden',
|
||||||
|
default : 0
|
||||||
|
};
|
||||||
|
data.manifest.arguments.install.push(inputClone);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'password' type input.
|
// 'password' type input.
|
||||||
|
@ -178,12 +300,6 @@
|
||||||
data.manifest.arguments.install[k].inputType = 'password';
|
data.manifest.arguments.install[k].inputType = 'password';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Multilingual label
|
|
||||||
data.manifest.arguments.install[k].label = (typeof data.manifest.arguments.install[k].ask[y18n.locale] !== 'undefined') ?
|
|
||||||
data.manifest.arguments.install[k].ask[y18n.locale] :
|
|
||||||
data.manifest.arguments.install[k].ask['en']
|
|
||||||
;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +310,7 @@
|
||||||
;
|
;
|
||||||
|
|
||||||
// Multi Instance settings boolean to text
|
// Multi Instance settings boolean to text
|
||||||
data.manifest.multi_instance = (data.manifest.multi_instance == 'true') ? y18n.t('yes') : y18n.t('no');
|
data.manifest.multi_instance = data.manifest.multi_instance ? y18n.t('yes') : y18n.t('no');
|
||||||
|
|
||||||
// View app install form
|
// View app install form
|
||||||
c.view('app/app_install', data);
|
c.view('app/app_install', data);
|
||||||
|
@ -204,13 +320,11 @@
|
||||||
// App installation form
|
// App installation form
|
||||||
app.get('#/apps/install/:app', function (c) {
|
app.get('#/apps/install/:app', function (c) {
|
||||||
c.api('/apps?raw', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
c.api('/apps?raw', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
||||||
|
|
||||||
c.appInstallForm(
|
c.appInstallForm(
|
||||||
c.params['app'],
|
c.params['app'],
|
||||||
data[c.params['app']].manifest,
|
data[c.params['app']].manifest,
|
||||||
c.params
|
c.params
|
||||||
);
|
);
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -218,10 +332,23 @@
|
||||||
app.post('#/apps', function(c) {
|
app.post('#/apps', function(c) {
|
||||||
// Warn admin if app is going to be installed on domain root.
|
// Warn admin if app is going to be installed on domain root.
|
||||||
if (c.params['path'] !== '/' || confirm(y18n.t('confirm_install_domain_root', [c.params['domain']]))) {
|
if (c.params['path'] !== '/' || confirm(y18n.t('confirm_install_domain_root', [c.params['domain']]))) {
|
||||||
params = { 'label': c.params['label'], 'app': c.params['app'] };
|
var params = {
|
||||||
|
label: c.params['label'],
|
||||||
|
app: c.params['app']
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check for duplicate arg produced by empty checkbox. (See inputClone)
|
||||||
delete c.params['label'];
|
delete c.params['label'];
|
||||||
delete c.params['app'];
|
delete c.params['app'];
|
||||||
|
$.each(c.params, function(k, v) {
|
||||||
|
if (typeof(v) === 'object' && Array.isArray(v)) {
|
||||||
|
// And return only first value
|
||||||
|
c.params[k] = v[0];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
params['args'] = c.serialize(c.params.toHash());
|
params['args'] = c.serialize(c.params.toHash());
|
||||||
|
|
||||||
// Do not pass empty args.
|
// Do not pass empty args.
|
||||||
if (params['args'] === "") {
|
if (params['args'] === "") {
|
||||||
delete params['args'];
|
delete params['args'];
|
||||||
|
@ -241,7 +368,10 @@
|
||||||
// Install custom app from github
|
// Install custom app from github
|
||||||
app.post('#/apps/install/custom', function(c) {
|
app.post('#/apps/install/custom', function(c) {
|
||||||
|
|
||||||
params = { 'label': c.params['label'], 'app': c.params['url'] };
|
var params = {
|
||||||
|
label: c.params['label'],
|
||||||
|
app: c.params['url']
|
||||||
|
};
|
||||||
delete c.params['label'];
|
delete c.params['label'];
|
||||||
delete c.params['url'];
|
delete c.params['url'];
|
||||||
|
|
||||||
|
@ -351,7 +481,10 @@
|
||||||
y18n.t('applications'),
|
y18n.t('applications'),
|
||||||
y18n.t('confirm_access_remove_all', [c.params['app']]),
|
y18n.t('confirm_access_remove_all', [c.params['app']]),
|
||||||
function() {
|
function() {
|
||||||
params = {'apps': c.params['app'], 'users':[]};
|
var params = {
|
||||||
|
apps: c.params['app'],
|
||||||
|
users: []
|
||||||
|
};
|
||||||
c.api('/access?'+c.serialize(params), function(data) { // http://api.yunohost.org/#!/app/app_removeaccess_delete_12
|
c.api('/access?'+c.serialize(params), function(data) { // http://api.yunohost.org/#!/app/app_removeaccess_delete_12
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/apps/'+ c.params['app']+ '/access');
|
c.redirect('#/apps/'+ c.params['app']+ '/access');
|
||||||
|
@ -370,7 +503,10 @@
|
||||||
y18n.t('applications'),
|
y18n.t('applications'),
|
||||||
y18n.t('confirm_access_remove_user', [c.params['app'], c.params['user']]),
|
y18n.t('confirm_access_remove_user', [c.params['app'], c.params['user']]),
|
||||||
function() {
|
function() {
|
||||||
params = {'apps': c.params['app'], 'users': c.params['user']};
|
var params = {
|
||||||
|
apps: c.params['app'],
|
||||||
|
users: c.params['user']
|
||||||
|
};
|
||||||
c.api('/access?'+c.serialize(params), function(data) { // http://api.yunohost.org/#!/app/app_removeaccess_delete_12
|
c.api('/access?'+c.serialize(params), function(data) { // http://api.yunohost.org/#!/app/app_removeaccess_delete_12
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/apps/'+ c.params['app']+ '/access');
|
c.redirect('#/apps/'+ c.params['app']+ '/access');
|
||||||
|
@ -389,7 +525,10 @@
|
||||||
y18n.t('applications'),
|
y18n.t('applications'),
|
||||||
y18n.t('confirm_access_add', [c.params['app']]),
|
y18n.t('confirm_access_add', [c.params['app']]),
|
||||||
function() {
|
function() {
|
||||||
params = {'apps': c.params['app'], 'users': null};
|
var params = {
|
||||||
|
apps: c.params['app'],
|
||||||
|
users: null
|
||||||
|
};
|
||||||
c.api('/access', function() { // http://api.yunohost.org/#!/app/app_addaccess_put_13
|
c.api('/access', function() { // http://api.yunohost.org/#!/app/app_addaccess_put_13
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/apps/'+ c.params['app'] +'/access');
|
c.redirect('#/apps/'+ c.params['app'] +'/access');
|
||||||
|
@ -404,7 +543,10 @@
|
||||||
|
|
||||||
// Grant access for a specific user
|
// Grant access for a specific user
|
||||||
app.post('#/apps/:app/access/add', function (c) {
|
app.post('#/apps/:app/access/add', function (c) {
|
||||||
params = {'users': c.params['user'], 'apps': c.params['app']};
|
var params = {
|
||||||
|
users: c.params['user'],
|
||||||
|
apps: c.params['app']
|
||||||
|
};
|
||||||
c.api('/access', function() { // http://api.yunohost.org/#!/app/app_addaccess_put_13
|
c.api('/access', function() { // http://api.yunohost.org/#!/app/app_addaccess_put_13
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/apps/'+ c.params['app'] +'/access');
|
c.redirect('#/apps/'+ c.params['app'] +'/access');
|
||||||
|
@ -417,7 +559,9 @@
|
||||||
y18n.t('applications'),
|
y18n.t('applications'),
|
||||||
y18n.t('confirm_access_clear', [c.params['app']]),
|
y18n.t('confirm_access_clear', [c.params['app']]),
|
||||||
function() {
|
function() {
|
||||||
params = {'apps': c.params['app']};
|
var params = {
|
||||||
|
apps: c.params['app']
|
||||||
|
};
|
||||||
c.api('/access', function() { //
|
c.api('/access', function() { //
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/apps/'+ c.params['app'] +'/access');
|
c.redirect('#/apps/'+ c.params['app'] +'/access');
|
||||||
|
@ -448,4 +592,70 @@
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Get app change label page
|
||||||
|
app.get('#/apps/:app/changelabel', function (c) {
|
||||||
|
c.api('/apps/'+c.params['app']+'?raw', function(app_data) {
|
||||||
|
data = {
|
||||||
|
id: c.params['app'],
|
||||||
|
label: app_data.settings.label,
|
||||||
|
};
|
||||||
|
c.view('app/app_changelabel', data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Change app label
|
||||||
|
app.post('#/apps/:app/changelabel', function (c) {
|
||||||
|
params = {'new_label': c.params['label']};
|
||||||
|
c.api('/apps/' + c.params['app'] + '/label', function(data) { // Call changelabel API
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/apps/'+ c.params['app']);
|
||||||
|
}, 'PUT', params);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get app change URL page
|
||||||
|
app.get('#/apps/:app/changeurl', function (c) {
|
||||||
|
c.api('/apps/'+c.params['app']+'?raw', function(app_data) {
|
||||||
|
c.api('/domains', function(domain_data) { // http://api.yunohost.org/#!/domain/domain_list_get_2
|
||||||
|
|
||||||
|
// Display a list of available domains
|
||||||
|
var domains = [];
|
||||||
|
$.each(domain_data.domains, function(k, domain) {
|
||||||
|
domains.push({
|
||||||
|
value: domain,
|
||||||
|
label: domain,
|
||||||
|
// Select current domain
|
||||||
|
selected: (domain == app_data.settings.domain ? true : false)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
data = {
|
||||||
|
id: c.params['app'],
|
||||||
|
label: app_data.manifest.name,
|
||||||
|
domains: domains,
|
||||||
|
// Pre-fill with current path
|
||||||
|
path: app_data.settings.path
|
||||||
|
};
|
||||||
|
c.view('app/app_changeurl', data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Change app URL
|
||||||
|
app.post('#/apps/:app/changeurl', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('applications'),
|
||||||
|
y18n.t('confirm_app_change_url', [c.params['app']]),
|
||||||
|
function() {
|
||||||
|
params = {'domain': c.params['domain'], 'path': c.params['path']};
|
||||||
|
c.api('/apps/' + c.params['app'] + '/changeurl', function(data) { // Call changeurl API
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/apps/'+ c.params['app']);
|
||||||
|
}, 'PUT', params);
|
||||||
|
},
|
||||||
|
function() {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/apps/'+ c.params['app'] + '/changeurl');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
'system_yunohost',
|
'system_yunohost',
|
||||||
'system_nginx'
|
'system_nginx'
|
||||||
];
|
];
|
||||||
|
|
||||||
// Storage list
|
// Storage list
|
||||||
app.get('#/backup', function (c) {
|
app.get('#/backup', function (c) {
|
||||||
var storages = [];
|
var storages = [];
|
||||||
|
@ -44,14 +45,14 @@
|
||||||
|
|
||||||
// Create a backup
|
// Create a backup
|
||||||
app.get('#/backup/:storage/create', function (c) {
|
app.get('#/backup/:storage/create', function (c) {
|
||||||
var data=[];
|
var data = [];
|
||||||
data['storage']={
|
data['storage'] = {
|
||||||
id:c.params['storage'],
|
id:c.params['storage'],
|
||||||
name:y18n.t('local_archives')
|
name:y18n.t('local_archives')
|
||||||
};
|
};
|
||||||
c.api('/hooks/backup', function(hooks) {
|
c.api('/hooks/backup', function(hooks) {
|
||||||
data['hooks']=c.groupHooks(hooks['hooks']);
|
data['hooks'] = c.groupHooks(hooks['hooks']);
|
||||||
data['apps']={};
|
data['apps'] = {};
|
||||||
c.api('/apps?with_backup', function(apps_list) {
|
c.api('/apps?with_backup', function(apps_list) {
|
||||||
data['apps'] = apps_list.apps;
|
data['apps'] = apps_list.apps;
|
||||||
c.view('backup/backup_create', data);
|
c.view('backup/backup_create', data);
|
||||||
|
@ -61,7 +62,7 @@
|
||||||
|
|
||||||
|
|
||||||
app.post('#/backup/:storage', function (c) {
|
app.post('#/backup/:storage', function (c) {
|
||||||
var params = c.ungroupHooks(c.params['hooks'],c.params['apps']);
|
var params = c.ungroupHooks(c.params['system_parts'],c.params['apps']);
|
||||||
c.api('/backup', function() {
|
c.api('/backup', function() {
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/backup/'+ c.params['storage']);
|
c.redirect('#/backup/'+ c.params['storage']);
|
||||||
|
@ -74,13 +75,13 @@
|
||||||
y18n.t('backup'),
|
y18n.t('backup'),
|
||||||
y18n.t('confirm_restore', [c.params['archive']]),
|
y18n.t('confirm_restore', [c.params['archive']]),
|
||||||
$.proxy(function(c){
|
$.proxy(function(c){
|
||||||
var params=c.ungroupHooks(c.params['hooks'],c.params['apps']);
|
var params = c.ungroupHooks(c.params['system_parts'],c.params['apps']);
|
||||||
params['force']='';
|
params['force'] = '';
|
||||||
c.api('/backup/restore/'+c.params['archive'], function(data) {
|
c.api('/backup/restore/'+c.params['archive'], function(data) {
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/backup/'+ c.params['storage']+'/'+c.params['archive']);
|
c.redirect('#/backup/'+ c.params['storage']+'/'+c.params['archive']);
|
||||||
}, 'POST', params);
|
}, 'POST', params);
|
||||||
},this,c),
|
}, this, c),
|
||||||
function(){
|
function(){
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/backup/'+ c.params['storage']+'/'+c.params['archive']);
|
c.redirect('#/backup/'+ c.params['storage']+'/'+c.params['archive']);
|
||||||
|
@ -127,14 +128,14 @@
|
||||||
// Get archive info
|
// Get archive info
|
||||||
app.get('#/backup/:storage/:archive', function (c) {
|
app.get('#/backup/:storage/:archive', function (c) {
|
||||||
c.api('/backup/archives/'+c.params['archive']+'?with_details', function(data) {
|
c.api('/backup/archives/'+c.params['archive']+'?with_details', function(data) {
|
||||||
data['storage']={
|
data.storage = {
|
||||||
id:c.params['storage'],
|
id: c.params['storage'],
|
||||||
name:y18n.t('local_archives')
|
name: y18n.t('local_archives')
|
||||||
};
|
};
|
||||||
data['other_storages']=[];
|
data.other_storages = [];
|
||||||
data['name']=c.params['archive'];
|
data.name = c.params['archive'];
|
||||||
data['hooks']=c.groupHooks(Object.keys(data['hooks']));
|
data.system_parts = c.groupHooks(Object.keys(data['system']));
|
||||||
data['items']=(data['hooks']!={} || data['apps']!=[]);
|
data.items = (data['hooks']!={} || data['apps']!=[]);
|
||||||
c.view('backup/backup_info', data);
|
c.view('backup/backup_info', data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -142,16 +143,16 @@
|
||||||
// Archive list
|
// Archive list
|
||||||
app.get('#/backup/:storage', function (c) {
|
app.get('#/backup/:storage', function (c) {
|
||||||
c.api('/backup/archives?with_info', function(data) {
|
c.api('/backup/archives?with_info', function(data) {
|
||||||
data['storage']={
|
data.storage = {
|
||||||
id:'local',
|
id: 'local',
|
||||||
name:y18n.t('local_archives')
|
name: y18n.t('local_archives')
|
||||||
};
|
};
|
||||||
data['archives2']=[];
|
data.archives2 = [];
|
||||||
$.each(data['archives'], function(name, info) {
|
$.each(data['archives'], function(name, info) {
|
||||||
info['name']=name;
|
info.name = name;
|
||||||
data['archives2'].unshift(info)
|
data.archives2.unshift(info)
|
||||||
});
|
});
|
||||||
data['archives']=data['archives2'];
|
data.archives = data.archives2;
|
||||||
c.view('backup/backup_list', data);
|
c.view('backup/backup_list', data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
app.get('#/domains', function (c) {
|
app.get('#/domains', function (c) {
|
||||||
c.api('/domains', function(data) { // http://api.yunohost.org/#!/domain/domain_list_get_2
|
c.api('/domains', function(data) { // http://api.yunohost.org/#!/domain/domain_list_get_2
|
||||||
c.api('/domains/main', function(data2) {
|
c.api('/domains/main', function(data2) {
|
||||||
domains = [];
|
var domains = [];
|
||||||
$.each(data.domains, function(k, domain) {
|
$.each(data.domains, function(k, domain) {
|
||||||
domains.push({
|
domains.push({
|
||||||
url: domain,
|
url: domain,
|
||||||
|
@ -21,11 +21,14 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
// Do not show main domain form if we have only 1 domain
|
// Do not show main domain form if we have only 1 domain
|
||||||
main_domain_form = (domains.length > 1) ? true: false;
|
var main_domain_form = (domains.length > 1) ? true: false;
|
||||||
|
|
||||||
// Sort domains with main domain first
|
// Sort domains with main domain first
|
||||||
domains.sort(function(a, b){ return -2*(a.main) + 1; });
|
domains.sort(function(a, b){ return -2*(a.main) + 1; });
|
||||||
c.view('domain/domain_list', {domains: domains, main_domain_form: main_domain_form});
|
c.view('domain/domain_list', {
|
||||||
|
domains: domains,
|
||||||
|
main_domain_form: main_domain_form
|
||||||
|
});
|
||||||
}, 'PUT');
|
}, 'PUT');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -40,10 +43,10 @@
|
||||||
c.params.ddomains = ['.nohost.me', '.noho.st'];
|
c.params.ddomains = ['.nohost.me', '.noho.st'];
|
||||||
})
|
})
|
||||||
.always(function() {
|
.always(function() {
|
||||||
data = {
|
var data = {
|
||||||
ddomains : c.params.ddomains,
|
ddomains: c.params.ddomains,
|
||||||
domains : c.params.domains,
|
domains: c.params.domains,
|
||||||
allowDyndnsDomain : true
|
allowDyndnsDomain: true
|
||||||
};
|
};
|
||||||
|
|
||||||
// Allow only 1 DynDns domain.
|
// Allow only 1 DynDns domain.
|
||||||
|
@ -60,17 +63,18 @@
|
||||||
|
|
||||||
// Add domain (POST)
|
// Add domain (POST)
|
||||||
app.post('#/domains/add', function (c) {
|
app.post('#/domains/add', function (c) {
|
||||||
|
var params = {};
|
||||||
|
var endurl = '';
|
||||||
if (c.params['domain'] === '') {
|
if (c.params['domain'] === '') {
|
||||||
if (c.params['ddomain'] === '') {
|
if (c.params['ddomain'] === '') {
|
||||||
c.flash('fail', y18n.t('error_select_domain'));
|
c.flash('fail', y18n.t('error_select_domain'));
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/domains/add');
|
c.redirect('#/domains/add');
|
||||||
}
|
}
|
||||||
params = {'domain': c.params['ddomain'] + c.params['ddomain-ext']};
|
params.domain = c.params['ddomain'] + c.params['ddomain-ext'];
|
||||||
endurl = 'dyndns';
|
endurl = 'dyndns';
|
||||||
} else {
|
} else {
|
||||||
params = { 'domain': c.params['domain'] };
|
params.domain = c.params['domain'];
|
||||||
endurl = '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.api('/domains?'+endurl, function(data) { // http://api.yunohost.org/#!/domain/domain_add_post_1
|
c.api('/domains?'+endurl, function(data) { // http://api.yunohost.org/#!/domain/domain_add_post_1
|
||||||
|
@ -81,26 +85,197 @@
|
||||||
// Get existing domain info
|
// Get existing domain info
|
||||||
app.get('#/domains/:domain', function (c) {
|
app.get('#/domains/:domain', function (c) {
|
||||||
c.api('/domains/main', function(dataMain) {
|
c.api('/domains/main', function(dataMain) {
|
||||||
domain = {
|
c.api('/apps?installed', function(data) { // http://api.yunohost.org/#!/app/app_list_get_8
|
||||||
|
|
||||||
|
// FIXME - This dirty trick (along with the previous API call
|
||||||
|
// for apps installed) should be removed once letsencrypt_ynh
|
||||||
|
// is not used by many people anymore. Probably around 07/2017
|
||||||
|
// or end of 2017...
|
||||||
|
var enable_cert_management_ = true;
|
||||||
|
$.each(data['apps'], function(k, v) {
|
||||||
|
if (v.id == "letsencrypt") {
|
||||||
|
enable_cert_management_ = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var domain = {
|
||||||
name: c.params['domain'],
|
name: c.params['domain'],
|
||||||
main: (c.params['domain'] == dataMain.current_main_domain) ? true : false,
|
main: (c.params['domain'] == dataMain.current_main_domain) ? true : false,
|
||||||
url: "https://"+c.params['domain']
|
url: "https://"+c.params['domain'],
|
||||||
}
|
enable_cert_management: enable_cert_management_
|
||||||
|
};
|
||||||
c.view('domain/domain_info', domain);
|
c.view('domain/domain_info', domain);
|
||||||
|
});
|
||||||
}, 'PUT');
|
}, 'PUT');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Domain DNS
|
// Domain DNS
|
||||||
app.get('#/domains/:domain/dns', function (c) {
|
app.get('#/domains/:domain/dns', function (c) {
|
||||||
c.api('/domains/' + c.params['domain'] + '/dns', function(data) {
|
c.api('/domains/' + c.params['domain'] + '/dns', function(data) {
|
||||||
domain = {
|
var domain = {
|
||||||
name: c.params['domain'],
|
name: c.params['domain'],
|
||||||
dns: data
|
dns: data
|
||||||
}
|
};
|
||||||
c.view('domain/domain_dns', domain);
|
c.view('domain/domain_dns', domain);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Domain certificate
|
||||||
|
app.get('#/domains/:domain/cert-management', function (c) {
|
||||||
|
c.api('/domains/cert-status/' + c.params['domain'] + '?full', function(data) {
|
||||||
|
|
||||||
|
var s = data["certificates"][c.params['domain']];
|
||||||
|
var status_ = {
|
||||||
|
CA_type: s.CA_type.verbose,
|
||||||
|
CA_name: s.CA_name,
|
||||||
|
validity: s.validity,
|
||||||
|
ACME_eligible: s.ACME_eligible
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (s.summary.code) {
|
||||||
|
case "critical" :
|
||||||
|
status_.alert_type = "danger";
|
||||||
|
status_.alert_icon = "exclamation-circle" ;
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_not_valid');
|
||||||
|
break;
|
||||||
|
case "warning" :
|
||||||
|
status_.alert_type = "warning";
|
||||||
|
status_.alert_icon = "exclamation-triangle";
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_selfsigned');
|
||||||
|
break;
|
||||||
|
case "attention" :
|
||||||
|
if (status_.CA_type == "lets-encrypt") {
|
||||||
|
status_.alert_type = "warning";
|
||||||
|
status_.alert_icon = "clock-o";
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_letsencrypt_about_to_expire');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
status_.alert_type = "danger";
|
||||||
|
status_.alert_icon = "clock-o";
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_about_to_expire');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "good" :
|
||||||
|
status_.alert_type = "success";
|
||||||
|
status_.alert_icon = "check-circle";
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_good');
|
||||||
|
break;
|
||||||
|
case "great" :
|
||||||
|
status_.alert_type = "success";
|
||||||
|
status_.alert_icon = "thumbs-up";
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_great');
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
status_.alert_type = "warning"
|
||||||
|
status_.alert_icon = "question"
|
||||||
|
status_.alert_message = y18n.t('certificate_alert_unknown');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var actions_enabled = {
|
||||||
|
install_letsencrypt: false,
|
||||||
|
manual_renew_letsencrpt: false,
|
||||||
|
regen_selfsigned: false,
|
||||||
|
replace_with_selfsigned: false
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (s.CA_type.code) {
|
||||||
|
case "self-signed" :
|
||||||
|
actions_enabled.install_letsencrypt = true;
|
||||||
|
actions_enabled.regen_selfsigned = true;
|
||||||
|
break;
|
||||||
|
case "lets-encrypt" :
|
||||||
|
actions_enabled.manual_renew_letsencrpt = true;
|
||||||
|
actions_enabled.replace_with_selfsigned = true;
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
actions_enabled.replace_with_selfsigned = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_ = {
|
||||||
|
name: c.params['domain'],
|
||||||
|
status: status_,
|
||||||
|
actions_enabled : actions_enabled
|
||||||
|
};
|
||||||
|
c.view('domain/domain_cert', data_);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Install let's encrypt certificate on domain
|
||||||
|
app.get('#/domains/:domain/cert-install-LE', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('certificate'),
|
||||||
|
y18n.t('confirm_cert_install_LE', [c.params['domain']]),
|
||||||
|
function(){
|
||||||
|
c.api('/domains/cert-install/' + c.params['domain'], function(data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}, 'POST');
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Regenerate a self-signed certificate
|
||||||
|
app.get('#/domains/:domain/cert-regen-selfsigned', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('certificate'),
|
||||||
|
y18n.t('confirm_cert_regen_selfsigned', [c.params['domain']]),
|
||||||
|
function(){
|
||||||
|
c.api('/domains/cert-install/' + c.params['domain'] + "?self_signed", function(data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}, 'POST');
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Manually renew a Let's Encrypt certificate
|
||||||
|
app.get('#/domains/:domain/cert-renew-letsencrypt', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('certificate'),
|
||||||
|
y18n.t('confirm_cert_manual_renew_LE', [c.params['domain']]),
|
||||||
|
function(){
|
||||||
|
c.api('/domains/cert-renew/' + c.params['domain'] + "?force", function(data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}, 'POST');
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Replace valid cert with self-signed
|
||||||
|
app.get('#/domains/:domain/cert-replace-with-selfsigned', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('certificate'),
|
||||||
|
y18n.t('confirm_cert_revert_to_selfsigned', [c.params['domain']]),
|
||||||
|
function(){
|
||||||
|
c.api('/domains/cert-install/' + c.params['domain'] + "?self_signed&force", function(data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}, 'POST');
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/domains/'+c.params['domain']+'/cert-management');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Remove existing domain
|
// Remove existing domain
|
||||||
app.get('#/domains/:domain/delete', function (c) {
|
app.get('#/domains/:domain/delete', function (c) {
|
||||||
c.confirm(
|
c.confirm(
|
||||||
|
@ -130,14 +305,16 @@
|
||||||
y18n.t('domains'),
|
y18n.t('domains'),
|
||||||
y18n.t('confirm_change_maindomain'),
|
y18n.t('confirm_change_maindomain'),
|
||||||
function(){
|
function(){
|
||||||
params = {'new_domain': c.params['domain']};
|
var params = {
|
||||||
|
new_domain: c.params['domain']
|
||||||
|
};
|
||||||
c.api('/domains/main', function(data) { // http://api.yunohost.org/#!/tools/tools_maindomain_put_1
|
c.api('/domains/main', function(data) { // http://api.yunohost.org/#!/tools/tools_maindomain_put_1
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/domains');
|
c.redirect('#/domains');
|
||||||
}, 'PUT', params);
|
}, 'PUT', params);
|
||||||
|
|
||||||
// Wait 15s and refresh the page
|
// Wait 15s and refresh the page
|
||||||
refreshDomain = window.setTimeout(function(){
|
var refreshDomain = window.setTimeout(function(){
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/domains');
|
c.redirect('#/domains');
|
||||||
}, 15000);
|
}, 15000);
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
app.get('#/tools/firewall', function (c) {
|
app.get('#/tools/firewall', function (c) {
|
||||||
c.api('/firewall?raw', function(data) {
|
c.api('/firewall?raw', function(data) {
|
||||||
var firewall = {
|
var firewall = {
|
||||||
ports : {},
|
ports: {},
|
||||||
upnp : false
|
upnp: false
|
||||||
};
|
};
|
||||||
|
|
||||||
// Reorganize ports
|
// Reorganize ports
|
||||||
|
@ -38,9 +38,12 @@
|
||||||
app.get('#/tools/firewall/upnp/:action', function (c) {
|
app.get('#/tools/firewall/upnp/:action', function (c) {
|
||||||
c.confirm(
|
c.confirm(
|
||||||
y18n.t('firewall'),
|
y18n.t('firewall'),
|
||||||
y18n.t('confirm_upnp_action', [y18n.t(c.params['action'])]),
|
// confirm_upnp_enable and confirm_upnp_disable
|
||||||
|
y18n.t('confirm_upnp_' + c.params['action'].toLowerCase()),
|
||||||
function(){
|
function(){
|
||||||
params = {'action' : c.params['action']};
|
var params = {
|
||||||
|
action : c.params['action']
|
||||||
|
};
|
||||||
c.api('/firewall/upnp', function(data) {
|
c.api('/firewall/upnp', function(data) {
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/tools/firewall');
|
c.redirect('#/tools/firewall');
|
||||||
|
@ -109,8 +112,8 @@
|
||||||
// --ipv6-only:
|
// --ipv6-only:
|
||||||
// --no-upnp:
|
// --no-upnp:
|
||||||
var params = {
|
var params = {
|
||||||
'port' : port,
|
port : port,
|
||||||
'protocol' : protocol,
|
protocol : protocol
|
||||||
};
|
};
|
||||||
c.api('/firewall/port?'+endurl, function(data) {
|
c.api('/firewall/port?'+endurl, function(data) {
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
|
@ -129,7 +132,8 @@
|
||||||
app.get('#/tools/firewall/port/:port/:protocol/:connection/:action', function (c) {
|
app.get('#/tools/firewall/port/:port/:protocol/:connection/:action', function (c) {
|
||||||
c.confirm(
|
c.confirm(
|
||||||
y18n.t('firewall'),
|
y18n.t('firewall'),
|
||||||
y18n.t( 'confirm_firewall', [ y18n.t(c.params['action']), c.params['port'], y18n.t(c.params['protocol']), y18n.t(c.params['connection'])]),
|
// confirm_firewall_open and confirm_firewall_close
|
||||||
|
y18n.t( 'confirm_firewall_' + c.params['action'].toLowerCase(), [ c.params['port'], y18n.t(c.params['protocol']), y18n.t(c.params['connection'])]),
|
||||||
function(){
|
function(){
|
||||||
c.togglePort(
|
c.togglePort(
|
||||||
c.params['port'],
|
c.params['port'],
|
||||||
|
@ -149,7 +153,7 @@
|
||||||
app.post('#/tools/firewall/port', function (c) {
|
app.post('#/tools/firewall/port', function (c) {
|
||||||
c.confirm(
|
c.confirm(
|
||||||
y18n.t('firewall'),
|
y18n.t('firewall'),
|
||||||
y18n.t('confirm_firewall', [ y18n.t(c.params['action']), c.params['port'], y18n.t(c.params['protocol']), y18n.t(c.params['connection']) ]),
|
y18n.t('confirm_firewall_' + c.params['action'].toLowerCase(), [ c.params['port'], y18n.t(c.params['protocol']), y18n.t(c.params['connection']) ]),
|
||||||
function(){
|
function(){
|
||||||
c.togglePort(
|
c.togglePort(
|
||||||
c.params['port'],
|
c.params['port'],
|
||||||
|
|
|
@ -35,9 +35,10 @@
|
||||||
|
|
||||||
// Loop through items in a reverse order (older first)
|
// Loop through items in a reverse order (older first)
|
||||||
$($('item', xml).get().reverse()).each(function(k, v) {
|
$($('item', xml).get().reverse()).each(function(k, v) {
|
||||||
var link=$('link', v).text();
|
var link = $('link', v).text();
|
||||||
if (typeof link == 'string' && link !== '' && link.charAt(0) == '/')
|
if (typeof link == 'string' && link !== '' && link.charAt(0) == '/') {
|
||||||
link=forumUrl+link;
|
link = forumUrl+link;
|
||||||
|
}
|
||||||
|
|
||||||
// var description=$('description', v).text();
|
// var description=$('description', v).text();
|
||||||
// description=description.replace('href="/','href="'+forumUrl+'/');
|
// description=description.replace('href="/','href="'+forumUrl+'/');
|
||||||
|
@ -70,6 +71,13 @@
|
||||||
c.flash('fail', y18n.t('error_retrieve_feed', [securityFeed]));
|
c.flash('fail', y18n.t('error_retrieve_feed', [securityFeed]));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
c.api("/diagnosis", function(data) {
|
||||||
|
console.log(data);
|
||||||
|
if (data.security["CVE-2017-5754"].vulnerable) {
|
||||||
|
c.flash('danger', y18n.t('meltdown'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
c.view('home');
|
c.view('home');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -138,12 +146,12 @@
|
||||||
// Store url from params, it could have change form 'run' state
|
// Store url from params, it could have change form 'run' state
|
||||||
store.set('url', c.params['domain'] +'/yunohost/api');
|
store.set('url', c.params['domain'] +'/yunohost/api');
|
||||||
|
|
||||||
params = {
|
var params = {
|
||||||
'password': c.params['password']
|
password: c.params['password']
|
||||||
};
|
};
|
||||||
c.api('/login', function(data) {
|
c.api('/login', function(data) {
|
||||||
store.set('connected', true);
|
store.set('connected', true);
|
||||||
|
c.trigger('login');
|
||||||
$('#masthead .logout-btn').fadeIn();
|
$('#masthead .logout-btn').fadeIn();
|
||||||
c.flash('success', y18n.t('logged_in'));
|
c.flash('success', y18n.t('logged_in'));
|
||||||
if (store.get('path')) {
|
if (store.get('path')) {
|
||||||
|
@ -160,6 +168,7 @@
|
||||||
store.clear('url');
|
store.clear('url');
|
||||||
store.clear('connected');
|
store.clear('connected');
|
||||||
store.set('path', '#/');
|
store.set('path', '#/');
|
||||||
|
c.trigger('logout');
|
||||||
c.flash('success', y18n.t('logged_out'));
|
c.flash('success', y18n.t('logged_out'));
|
||||||
c.redirect('#/login');
|
c.redirect('#/login');
|
||||||
}, 'GET', {}, false);
|
}, 'GET', {}, false);
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
// Server monitoring
|
// Server monitoring
|
||||||
app.get('#/tools/monitor', function (c) {
|
app.get('#/tools/monitor', function (c) {
|
||||||
monitorData = {};
|
var monitorData = {};
|
||||||
|
|
||||||
// Why this method ?
|
// Why this method ?
|
||||||
c.api('/services/glances', function(data) { // ?
|
c.api('/services/glances', function(data) { // ?
|
||||||
|
|
|
@ -25,10 +25,10 @@
|
||||||
$('#masthead').hide();
|
$('#masthead').hide();
|
||||||
$.get('https://dyndns.yunohost.org/domains', function() {})
|
$.get('https://dyndns.yunohost.org/domains', function() {})
|
||||||
.done(function(data){
|
.done(function(data){
|
||||||
c.params.ddomains = data.map(function(dom){return '.'+dom;});
|
c.params['ddomains'] = data.map(function(dom){return '.'+dom;});
|
||||||
})
|
})
|
||||||
.fail(function() {
|
.fail(function() {
|
||||||
c.params.ddomains = ['.nohost.me', '.noho.st'];
|
c.params['ddomains'] = ['.nohost.me', '.noho.st'];
|
||||||
})
|
})
|
||||||
.always(function() {
|
.always(function() {
|
||||||
c.view('postinstall/postinstall_2', c.params, function() {
|
c.view('postinstall/postinstall_2', c.params, function() {
|
||||||
|
@ -77,14 +77,16 @@
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.redirect('#/postinstall/domain');
|
c.redirect('#/postinstall/domain');
|
||||||
} else {
|
} else {
|
||||||
params = { 'domain': c.params['domain'].toLowerCase() };
|
var params = {
|
||||||
|
domain: c.params['domain'].toLowerCase()
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
c.confirm(
|
c.confirm(
|
||||||
y18n.t('postinstall'),
|
y18n.t('postinstall'),
|
||||||
y18n.t('confirm_postinstall', [c.params['domain']]),
|
y18n.t('confirm_postinstall', [c.params['domain']]),
|
||||||
function(){
|
function(){
|
||||||
params['password'] = c.params['password'];
|
params.password = c.params['password'];
|
||||||
|
|
||||||
store.set('url', window.location.hostname +'/yunohost/api');
|
store.set('url', window.location.hostname +'/yunohost/api');
|
||||||
store.set('user', 'admin');
|
store.set('user', 'admin');
|
||||||
|
|
|
@ -11,17 +11,30 @@
|
||||||
// All services status
|
// All services status
|
||||||
app.get('#/services', function (c) {
|
app.get('#/services', function (c) {
|
||||||
c.api('/services', function(data) { // ?
|
c.api('/services', function(data) { // ?
|
||||||
data2 = { 'services': [] };
|
var data2 = {
|
||||||
|
services: []
|
||||||
|
};
|
||||||
$.each(data, function(k, v) {
|
$.each(data, function(k, v) {
|
||||||
v.name = k;
|
v.name = k;
|
||||||
// Handlebars want booleans
|
// Handlebars want booleans
|
||||||
v.is_loaded = (v.loaded=='enabled') ? true : false;
|
v.is_loaded = (v.loaded=='enabled') ? true : false;
|
||||||
v.is_running = (v.status=='running') ? true : false;
|
v.is_running = (v.active=='active') ? true : false;
|
||||||
// Translate status and loaded state
|
// Translate status and loaded state
|
||||||
v.status = y18n.t(v.status);
|
v.status = y18n.t(v.status);
|
||||||
v.loaded = y18n.t(v.loaded);
|
v.loaded = y18n.t(v.loaded);
|
||||||
data2.services.push(v);
|
data2.services.push(v);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
data2.services.sort(function (a, b) {
|
||||||
|
if (a.name > b.name) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (a.name < b.name) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
c.view('service/service_list', data2);
|
c.view('service/service_list', data2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -29,13 +42,15 @@
|
||||||
// Status & actions for a service
|
// Status & actions for a service
|
||||||
app.get('#/services/:service', function (c) {
|
app.get('#/services/:service', function (c) {
|
||||||
c.api('/services/'+ c.params['service'], function(data) { // ?
|
c.api('/services/'+ c.params['service'], function(data) { // ?
|
||||||
data2 = { 'service': data };
|
var data2 = {
|
||||||
|
service: data
|
||||||
|
};
|
||||||
data2.service.name = c.params['service'];
|
data2.service.name = c.params['service'];
|
||||||
// Handlebars want booleans
|
// Handlebars want booleans
|
||||||
data2.service.is_loaded = (data.loaded=='enabled') ? true : false;
|
data2.service.is_loaded = (data.loaded=='enabled') ? true : false;
|
||||||
data2.service.is_running = (data.status=='running') ? true : false;
|
data2.service.is_running = (data.active=='active') ? true : false;
|
||||||
// Translate status and loaded state
|
// Translate status and loaded state
|
||||||
data2.service.status = y18n.t(data.status);
|
data2.service.active = y18n.t(data.active);
|
||||||
data2.service.loaded = y18n.t(data.loaded);
|
data2.service.loaded = y18n.t(data.loaded);
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
c.view('service/service_info', data2);
|
c.view('service/service_info', data2);
|
||||||
|
@ -44,7 +59,9 @@
|
||||||
|
|
||||||
// Service log
|
// Service log
|
||||||
app.get('#/services/:service/log', function (c) {
|
app.get('#/services/:service/log', function (c) {
|
||||||
params = { 'number': 50 };
|
var params = {
|
||||||
|
number: 50
|
||||||
|
};
|
||||||
c.api('/services/'+ c.params['service'] +'/log', function(data) { // ?
|
c.api('/services/'+ c.params['service'] +'/log', function(data) { // ?
|
||||||
data2 = { 'logs': [], 'name': c.params['service'] };
|
data2 = { 'logs': [], 'name': c.params['service'] };
|
||||||
$.each(data, function(k, v) {
|
$.each(data, function(k, v) {
|
||||||
|
@ -59,9 +76,11 @@
|
||||||
app.get('#/services/:service/:action', function (c) {
|
app.get('#/services/:service/:action', function (c) {
|
||||||
c.confirm(
|
c.confirm(
|
||||||
"Service",
|
"Service",
|
||||||
y18n.t('confirm_service_action', [y18n.t(c.params['action']), c.params['service']]),
|
// confirm_service_start, confirm_service_stop, confirm_service_enable and confirm_service_disable
|
||||||
|
y18n.t('confirm_service_' + c.params['action'].toLowerCase(), [c.params['service']]),
|
||||||
function(){
|
function(){
|
||||||
var method = null, endurl = c.params['service'];
|
var method = null,
|
||||||
|
endurl = c.params['service'];
|
||||||
|
|
||||||
switch (c.params['action']) {
|
switch (c.params['action']) {
|
||||||
case 'start':
|
case 'start':
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
// Update administration password (PUT)
|
// Update administration password (PUT)
|
||||||
app.put('#/tools/adminpw', function (c) {
|
app.put('#/tools/adminpw', function (c) {
|
||||||
params = {};
|
var params = {};
|
||||||
$.each(c.params.toHash(), function(key, value) {
|
$.each(c.params.toHash(), function(key, value) {
|
||||||
if (value !== '') { params[key] = value; }
|
if (value !== '') { params[key] = value; }
|
||||||
});
|
});
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
// System update & upgrade
|
// System update & upgrade
|
||||||
app.get('#/update', function (c) {
|
app.get('#/update', function (c) {
|
||||||
c.api('/update', function(data) {
|
c.api('/update', function(data) {
|
||||||
packagesLength = data.packages.length;
|
var packagesLength = data.packages.length;
|
||||||
for(var i = 0; i < packagesLength; i++) {
|
for(var i = 0; i < packagesLength; i++) {
|
||||||
data.packages[i].delayed = false;
|
data.packages[i].delayed = false;
|
||||||
data.packages[i].changelog = data.packages[i].changelog.replace(/\n/g, '<br />');
|
data.packages[i].changelog = data.packages[i].changelog.replace(/\n/g, '<br />');
|
||||||
|
@ -74,9 +74,10 @@
|
||||||
else {
|
else {
|
||||||
c.confirm(
|
c.confirm(
|
||||||
y18n.t('tools'),
|
y18n.t('tools'),
|
||||||
y18n.t('confirm_update_type', [y18n.t('system_'+c.params['type']).toLowerCase()]),
|
// confirm_update_apps and confirm_update_packages
|
||||||
|
y18n.t('confirm_update_' + c.params['type'].toLowerCase()),
|
||||||
function(){
|
function(){
|
||||||
endurl = '';
|
var endurl = '';
|
||||||
if (c.params['type'] == 'packages') {endurl = 'ignore_apps';}
|
if (c.params['type'] == 'packages') {endurl = 'ignore_apps';}
|
||||||
else if (c.params['type'] == 'apps') {endurl = 'ignore_packages';}
|
else if (c.params['type'] == 'apps') {endurl = 'ignore_packages';}
|
||||||
|
|
||||||
|
@ -152,6 +153,27 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Upgrade a specific apps
|
||||||
|
app.get('#/upgrade/apps/:app', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('tools'),
|
||||||
|
y18n.t('confirm_update_specific_app', [c.params['app']]),
|
||||||
|
function(){
|
||||||
|
c.api('/upgrade/apps?app='+c.params['app'].toLowerCase(),
|
||||||
|
function(data) {
|
||||||
|
// 'log' is a reserved name, maybe in handlebars
|
||||||
|
data.logs = data.log;
|
||||||
|
c.view('upgrade/upgrade', data);
|
||||||
|
}, 'PUT');
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/update');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Download SSL Certificate Authority
|
// Download SSL Certificate Authority
|
||||||
app.get('#/tools/ca', function (c) {
|
app.get('#/tools/ca', function (c) {
|
||||||
c.view('tools/tools_ca');
|
c.view('tools/tools_ca');
|
||||||
|
@ -159,7 +181,7 @@
|
||||||
|
|
||||||
// Security feed
|
// Security feed
|
||||||
app.get('#/tools/security-feed', function (c) {
|
app.get('#/tools/security-feed', function (c) {
|
||||||
data = {
|
var data = {
|
||||||
items: []
|
items: []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -181,11 +203,12 @@
|
||||||
.done(function(xml){
|
.done(function(xml){
|
||||||
// Loop through items
|
// Loop through items
|
||||||
$('item', xml).each(function(k, v) {
|
$('item', xml).each(function(k, v) {
|
||||||
var link=$('link', v)[0].innerHTML;
|
var link = $('link', v)[0].innerHTML;
|
||||||
if (typeof link == 'string' && link !== '' && link.charAt(0) == '/')
|
if (typeof link == 'string' && link !== '' && link.charAt(0) == '/') {
|
||||||
link=forumUrl+link;
|
link = forumUrl+link;
|
||||||
var description=$('description', v)[0].textContent;
|
}
|
||||||
description=description.replace('href="/','href="'+forumUrl+'/');
|
var description = $('description', v)[0].textContent;
|
||||||
|
description = description.replace('href="/','href="'+forumUrl+'/');
|
||||||
|
|
||||||
var item = {
|
var item = {
|
||||||
guid: $('guid', v)[0].innerHTML,
|
guid: $('guid', v)[0].innerHTML,
|
||||||
|
@ -212,12 +235,69 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Reboot or shutdown button
|
||||||
|
app.get('#/tools/reboot', function (c) {
|
||||||
|
c.view('tools/tools_reboot');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Reboot or shutdown actions
|
||||||
|
app.get('#/tools/reboot/:action', function (c) {
|
||||||
|
var action = c.params['action'].toLowerCase();
|
||||||
|
if (action == 'reboot' || action == 'shutdown') {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('tools_' + action),
|
||||||
|
// confirm_reboot_action_reboot or confirm_reboot_action_shutdown
|
||||||
|
y18n.t('confirm_reboot_action_' + action),
|
||||||
|
function(){
|
||||||
|
c.api('/'+action+'?force', function(data) {
|
||||||
|
// This code is not executed due to 502 response (reboot or shutdown)
|
||||||
|
c.redirect('#/logout');
|
||||||
|
}, 'PUT', {}, false, function (xhr) {
|
||||||
|
c.flash('success', y18n.t('tools_' + action + '_done'))
|
||||||
|
// Disconnect from the webadmin
|
||||||
|
store.clear('url');
|
||||||
|
store.clear('connected');
|
||||||
|
store.set('path', '#/');
|
||||||
|
|
||||||
|
// Rename the page to allow refresh without ask for rebooting
|
||||||
|
window.location.href = window.location.href.split('#')[0] + '#/';
|
||||||
|
// Display reboot or shutdown info
|
||||||
|
// We can't use template because now the webserver is off
|
||||||
|
if (action == 'reboot') {
|
||||||
|
$('#main').replaceWith('<div id="main"><div class="alert alert-warning"><i class="fa-refresh"></i> ' + y18n.t('tools_rebooting') + '</div></div>');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$('#main').replaceWith('<div id="main"><div class="alert alert-warning"><i class="fa-power-off"></i> ' + y18n.t('tools_shuttingdown') + '</div></div>');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove loader if any
|
||||||
|
$('div.loader').remove();
|
||||||
|
|
||||||
|
// Force scrollTop on page load
|
||||||
|
$('html, body').scrollTop(0);
|
||||||
|
store.clear('slide');
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/tools/reboot');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c.flash('fail', y18n.t('unknown_action', [action]));
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/tools/reboot');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Diagnosis
|
// Diagnosis
|
||||||
app.get('#/tools/diagnosis(/:private)?', function (c) {
|
app.get('#/tools/diagnosis(/:private)?', function (c) {
|
||||||
// See http://sammyjs.org/docs/routes for splat documentation
|
// See http://sammyjs.org/docs/routes for splat documentation
|
||||||
private = (c.params.splat[0] == 'private');
|
var private = (c.params.splat[0] == 'private');
|
||||||
|
|
||||||
endurl = (private) ? '?private' : '';
|
var endurl = (private) ? '?private' : '';
|
||||||
c.api('/diagnosis'+endurl, function(diagnosis) {
|
c.api('/diagnosis'+endurl, function(diagnosis) {
|
||||||
c.view('tools/tools_diagnosis', {
|
c.view('tools/tools_diagnosis', {
|
||||||
'diagnosis' : JSON.stringify(diagnosis, undefined, 4),
|
'diagnosis' : JSON.stringify(diagnosis, undefined, 4),
|
||||||
|
@ -227,4 +307,88 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Reboot or shutdown button
|
||||||
|
app.get('#/tools/migrations', function (c) {
|
||||||
|
c.api('/migrations?pending', function(pending_migrations) {
|
||||||
|
c.api('/migrations?done', function(done_migrations) {
|
||||||
|
pending_migrations = pending_migrations.migrations;
|
||||||
|
done_migrations = done_migrations.migrations;
|
||||||
|
|
||||||
|
// Get rid of _ in the raw name of migrations (cosmetic)
|
||||||
|
for(var i = 0; i < pending_migrations.length; i++) {
|
||||||
|
pending_migrations[i].name = pending_migrations[i].name.replace(/_/g, " ")
|
||||||
|
if (pending_migrations[i].disclaimer)
|
||||||
|
{
|
||||||
|
pending_migrations[i].disclaimer = pending_migrations[i].disclaimer.replace(/\n/g, "<br />");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(var i = 0; i < done_migrations.length; i++) {
|
||||||
|
done_migrations[i].name = done_migrations[i].name.replace(/_/g, " ")
|
||||||
|
}
|
||||||
|
|
||||||
|
c.view('tools/tools_migrations', {
|
||||||
|
'pending_migrations' : pending_migrations.reverse(),
|
||||||
|
'done_migrations' : done_migrations.reverse()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('#/tools/migrations/run', function (c) {
|
||||||
|
var disclaimerAcks = $(".disclaimer-ack");
|
||||||
|
var withAcceptDisclaimerFlag = false;
|
||||||
|
for (var i = 0 ; i < disclaimerAcks.length ; i++)
|
||||||
|
{
|
||||||
|
console.log($(disclaimerAcks[i]).find("input:checked").val());
|
||||||
|
if (! $(disclaimerAcks[i]).find("input:checked").val())
|
||||||
|
{
|
||||||
|
// FIXME / TODO i18n
|
||||||
|
c.flash('fail', "Some of these migrations require you to acknowledge a disclaimer before running them.");
|
||||||
|
c.redirect('#/tools/migrations');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
withAcceptDisclaimerFlag = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Not sure if necessary, but this distinction is to avoid accidentally
|
||||||
|
// triggering a migration with a disclaimer if one goes to the
|
||||||
|
// /tools/migrations/run page "directly" somehow ...
|
||||||
|
if (withAcceptDisclaimerFlag)
|
||||||
|
{
|
||||||
|
c.api('/migrations/migrate?accept_disclaimer',
|
||||||
|
function (data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/tools/migrations');
|
||||||
|
}, 'POST')
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c.api('/migrations/migrate',
|
||||||
|
function (data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/tools/migrations');
|
||||||
|
}, 'POST')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('#/tools/migrations/skip', function (c) {
|
||||||
|
c.confirm(
|
||||||
|
y18n.t('migrations'),
|
||||||
|
y18n.t('confirm_migrations_skip'),
|
||||||
|
function(){
|
||||||
|
c.api('/migrations/migrate?skip', function(data) {
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/tools/migrations');
|
||||||
|
}, 'POST');
|
||||||
|
},
|
||||||
|
function(){
|
||||||
|
store.clear('slide');
|
||||||
|
c.redirect('#/tools/migrations');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
data.password_min_length = PASSWORD_MIN_LENGTH;
|
data.password_min_length = PASSWORD_MIN_LENGTH;
|
||||||
|
|
||||||
// User email use a fake splitted field
|
// User email use a fake splitted field
|
||||||
email = data.mail.split('@');
|
var email = data.mail.split('@');
|
||||||
data.email = {
|
data.email = {
|
||||||
username : email[0],
|
username : email[0],
|
||||||
domain : email[1]
|
domain : email[1]
|
||||||
|
@ -156,7 +156,7 @@
|
||||||
c.params['mailalias'] = c.params['mailforward'] = '';
|
c.params['mailalias'] = c.params['mailforward'] = '';
|
||||||
|
|
||||||
// Remove empty inputs
|
// Remove empty inputs
|
||||||
params = {};
|
var params = {};
|
||||||
$.each(c.params.toHash(), function(key, value) {
|
$.each(c.params.toHash(), function(key, value) {
|
||||||
if (value.length > 0 && key !== 'user') { params[key] = value; }
|
if (value.length > 0 && key !== 'user') { params[key] = value; }
|
||||||
});
|
});
|
||||||
|
|
19
src/js/yunohost/events.js
Normal file
19
src/js/yunohost/events.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
(function() {
|
||||||
|
// Get application context
|
||||||
|
var app = Sammy.apps['#main'];
|
||||||
|
var store = app.store;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Events
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
app.bind('login', function(e, data) {
|
||||||
|
this.api('/version', function(versions) {
|
||||||
|
$('#yunohost-version').html(y18n.t('footer_version', [versions.yunohost.version, versions.yunohost.repo]));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.bind('logout', function(e, data) {
|
||||||
|
$('#yunohost-version').empty();
|
||||||
|
});
|
||||||
|
})();
|
|
@ -43,9 +43,14 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
checkInstall: function(callback) {
|
checkInstall: function(callback) {
|
||||||
|
// Get base url from store or guess from current url
|
||||||
|
var baseUrl = (store.get('url') !== null) ? store.get('url')
|
||||||
|
: window.location.hostname + '/yunohost/api';
|
||||||
|
|
||||||
|
// Call API endpoint
|
||||||
$.ajax({
|
$.ajax({
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
url: 'https://'+ store.get('url') +'/installed',
|
url: 'https://'+ baseUrl +'/installed',
|
||||||
timeout: 3000
|
timeout: 3000
|
||||||
})
|
})
|
||||||
.success(function(data) {
|
.success(function(data) {
|
||||||
|
@ -57,10 +62,10 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
// API call
|
// API call
|
||||||
api: function(uri, callback, method, data, websocket) {
|
api: function(uri, callback, method, data, websocket, callbackOnFailure) {
|
||||||
c = this;
|
c = this;
|
||||||
|
|
||||||
call = function(uri, callback, method, data) {
|
call = function(uri, callback, method, data, callbackOnFailure) {
|
||||||
method = typeof method !== 'undefined' ? method : 'GET';
|
method = typeof method !== 'undefined' ? method : 'GET';
|
||||||
data = typeof data !== 'undefined' ? data : {};
|
data = typeof data !== 'undefined' ? data : {};
|
||||||
if (window.navigator && window.navigator.language && (typeof data.locale === 'undefined')) {
|
if (window.navigator && window.navigator.language && (typeof data.locale === 'undefined')) {
|
||||||
|
@ -75,26 +80,12 @@
|
||||||
}, 1500);
|
}, 1500);
|
||||||
}
|
}
|
||||||
|
|
||||||
loaded = false;
|
app.loaded = false;
|
||||||
if ($('div.loader').length === 0) {
|
if ($('div.loader').length === 0) {
|
||||||
$('#main').append('<div class="loader loader-content"></div>');
|
$('#main').append('<div class="loader loader-content"></div>');
|
||||||
}
|
}
|
||||||
|
if (typeof callbackOnFailure !== 'function') {
|
||||||
jQuery.ajax({
|
callbackOnFailure = function(xhr) {
|
||||||
url: 'https://' + store.get('url') + uri,
|
|
||||||
type: method,
|
|
||||||
crossdomain: true,
|
|
||||||
data: data,
|
|
||||||
traditional: true,
|
|
||||||
dataType: 'json'
|
|
||||||
})
|
|
||||||
.always(function(xhr, ts, error) {
|
|
||||||
})
|
|
||||||
.done(function(data) {
|
|
||||||
data = data || {};
|
|
||||||
callback(data);
|
|
||||||
})
|
|
||||||
.fail(function(xhr) {
|
|
||||||
// Postinstall is a custom case, we have to wait that
|
// Postinstall is a custom case, we have to wait that
|
||||||
// operation is done before doing anything
|
// operation is done before doing anything
|
||||||
if (uri === '/postinstall') {
|
if (uri === '/postinstall') {
|
||||||
|
@ -128,6 +119,13 @@
|
||||||
c.redirect('#/login');
|
c.redirect('#/login');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 500
|
||||||
|
else if (xhr.status == 500) {
|
||||||
|
error_log = JSON.parse(xhr.responseText);
|
||||||
|
error_log.route = error_log.route.join(' ') + '\n';
|
||||||
|
error_log.arguments = JSON.stringify(error_log.arguments);
|
||||||
|
c.flash('fail', y18n.t('internal_exception', [error_log.route, error_log.arguments, error_log.traceback]));
|
||||||
|
}
|
||||||
// 502 Bad gateway means API is down
|
// 502 Bad gateway means API is down
|
||||||
else if (xhr.status == 502) {
|
else if (xhr.status == 502) {
|
||||||
c.flash('fail', y18n.t('api_not_responding'));
|
c.flash('fail', y18n.t('api_not_responding'));
|
||||||
|
@ -149,14 +147,31 @@
|
||||||
$('html, body').scrollTop(0);
|
$('html, body').scrollTop(0);
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
jQuery.ajax({
|
||||||
|
url: 'https://' + store.get('url') + uri,
|
||||||
|
type: method,
|
||||||
|
crossdomain: true,
|
||||||
|
data: data,
|
||||||
|
traditional: true,
|
||||||
|
dataType: 'json'
|
||||||
|
})
|
||||||
|
.always(function(xhr, ts, error) {
|
||||||
|
})
|
||||||
|
.done(function(data) {
|
||||||
|
data = data || {};
|
||||||
|
callback(data);
|
||||||
|
})
|
||||||
|
.fail(callbackOnFailure);
|
||||||
};
|
};
|
||||||
|
|
||||||
websocket = typeof websocket !== 'undefined' ? websocket : true;
|
websocket = typeof websocket !== 'undefined' ? websocket : true;
|
||||||
if (websocket) {
|
if (websocket) {
|
||||||
|
|
||||||
// Open a WebSocket connection to retrieve live messages from the moulinette
|
// Open a WebSocket connection to retrieve live messages from the moulinette
|
||||||
ws = new WebSocket('wss://'+ store.get('url') +'/messages');
|
var ws = new WebSocket('wss://'+ store.get('url') +'/messages');
|
||||||
ws.onmessage = function(evt) {
|
ws.onmessage = function(evt) {
|
||||||
// console.log(evt.data);
|
// console.log(evt.data);
|
||||||
$.each($.parseJSON(evt.data), function(k, v) {
|
$.each($.parseJSON(evt.data), function(k, v) {
|
||||||
|
@ -169,9 +184,9 @@
|
||||||
|
|
||||||
ws.onclose = function() {};
|
ws.onclose = function() {};
|
||||||
|
|
||||||
ws.onopen = call(uri, callback, method, data);
|
ws.onopen = call(uri, callback, method, data, callbackOnFailure);
|
||||||
} else {
|
} else {
|
||||||
call(uri, callback, method, data);
|
call(uri, callback, method, data, callbackOnFailure);
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -180,18 +195,24 @@
|
||||||
view: function (view, data, callback, enableSlide) {
|
view: function (view, data, callback, enableSlide) {
|
||||||
c = this;
|
c = this;
|
||||||
|
|
||||||
|
// Default
|
||||||
callback = typeof callback !== 'undefined' ? callback : function() {};
|
callback = typeof callback !== 'undefined' ? callback : function() {};
|
||||||
rendered = this.render('views/'+ view +'.ms', data);
|
|
||||||
|
|
||||||
enableSlide = (typeof enableSlide !== 'undefined') ? enableSlide : true; // Change to false to disable animation
|
enableSlide = (typeof enableSlide !== 'undefined') ? enableSlide : true; // Change to false to disable animation
|
||||||
|
|
||||||
loaded = true;
|
app.loaded = true;
|
||||||
|
|
||||||
|
// Hide loader and modal
|
||||||
$('div.loader').remove();
|
$('div.loader').remove();
|
||||||
$('#modal').modal('hide');
|
$('#modal').modal('hide');
|
||||||
|
|
||||||
if (enableSlide) {
|
// Render content
|
||||||
|
var rendered = this.render('views/'+ view +'.ms', data);
|
||||||
|
|
||||||
|
// Update content helper
|
||||||
var leSwap = function() {
|
var leSwap = function() {
|
||||||
rendered.swap(function() {
|
rendered.swap(function() {
|
||||||
|
// Slide direction
|
||||||
|
if (enableSlide) {
|
||||||
$('.slide, .btn-breadcrumb a:not(:last-child)').on('click', function() {
|
$('.slide, .btn-breadcrumb a:not(:last-child)').on('click', function() {
|
||||||
$(this).addClass('active');
|
$(this).addClass('active');
|
||||||
if ($(this).hasClass('back') || $(this).parent('.btn-breadcrumb').length) {
|
if ($(this).hasClass('back') || $(this).parent('.btn-breadcrumb').length) {
|
||||||
|
@ -200,54 +221,40 @@
|
||||||
store.set('slide', 'to');
|
store.set('slide', 'to');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Paste <pre> helper
|
// Paste <pre> helper
|
||||||
c.prePaste();
|
c.prePaste();
|
||||||
|
|
||||||
// Run callback
|
// Run callback
|
||||||
callback();
|
callback();
|
||||||
|
|
||||||
// Force scrollTop on page load
|
// Force scrollTop on page load
|
||||||
$('html, body').scrollTop(0);
|
$('html, body').scrollTop(0);
|
||||||
|
|
||||||
// Resize body after the animation finishes (0.2s css transition)
|
|
||||||
// https://github.com/YunoHost/yunohost-admin/blob/231aac076a3aa836409b0d33fe02e48975990b7a/src/css/style.less#L92
|
|
||||||
setTimeout(function() {
|
|
||||||
$('body').resize();
|
|
||||||
}, 210);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
blockSize = $('#slider').width();
|
|
||||||
|
|
||||||
// Slide back effect
|
// Slide back effect
|
||||||
if (store.get('slide') == 'back') {
|
if (enableSlide && store.get('slide') == 'back') {
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
$('#slideBack').css('display', 'none');
|
$('#slideBack').css('display', 'none');
|
||||||
$('#slider-container').removeClass('move').css('margin-left', '-100%');
|
$('#slider-container').css('margin-left', '-100%');
|
||||||
$('#slideTo').show().html($('#main').html());
|
$('#slideTo').show().html($('#main').html());
|
||||||
leSwap();
|
leSwap();
|
||||||
$('#slider-container').addClass('move').css('margin-left', '0px');
|
$('#slider-container').css('margin-left', '0px');
|
||||||
|
}
|
||||||
// Slide to effect
|
// Slide to effect
|
||||||
} else if (store.get('slide') == 'to') {
|
else if (enableSlide && store.get('slide') == 'to') {
|
||||||
store.clear('slide');
|
store.clear('slide');
|
||||||
$('#slideTo').css('display', 'none');
|
$('#slideTo').css('display', 'none');
|
||||||
$('#slider-container').removeClass('move').css('margin-left', '0px');
|
$('#slider-container').css('margin-left', '0px');
|
||||||
$('#slideBack').show().html($('#main').html());
|
$('#slideBack').show().html($('#main').html());
|
||||||
leSwap();
|
leSwap();
|
||||||
$('#slider-container').addClass('move').css('margin-left', '-100%');
|
$('#slider-container').css('margin-left', '-100%');
|
||||||
|
|
||||||
} else {
|
|
||||||
leSwap();
|
|
||||||
}
|
}
|
||||||
} else {
|
// No slideing effect
|
||||||
rendered.swap(function(){
|
else {
|
||||||
// Paste <pre> helper
|
leSwap();
|
||||||
c.prePaste();
|
|
||||||
// Run callback
|
|
||||||
callback();
|
|
||||||
// Force scrollTop on page load
|
|
||||||
$('html, body').scrollTop(0);
|
|
||||||
$('body').resize();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -257,7 +264,7 @@
|
||||||
cancelCallback = typeof cancelCallback !== 'undefined' ? cancelCallback : function() {};
|
cancelCallback = typeof cancelCallback !== 'undefined' ? cancelCallback : function() {};
|
||||||
|
|
||||||
// Get modal element
|
// Get modal element
|
||||||
box = $('#modal');
|
var box = $('#modal');
|
||||||
|
|
||||||
// Modal title
|
// Modal title
|
||||||
if (typeof title === 'string' && title.length) {
|
if (typeof title === 'string' && title.length) {
|
||||||
|
@ -315,8 +322,8 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
groupHooks: function(hooks) {
|
groupHooks: function(hooks) {
|
||||||
data={};
|
var data = {};
|
||||||
var rules=[
|
var rules = [
|
||||||
{
|
{
|
||||||
id:'configuration',
|
id:'configuration',
|
||||||
isIn:function (hook) {
|
isIn:function (hook) {
|
||||||
|
@ -352,32 +359,31 @@
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
|
|
||||||
ungroupHooks: function(hooks,apps) {
|
ungroupHooks: function(system_parts,apps) {
|
||||||
var data={};
|
var data = {};
|
||||||
data['apps'] = apps || [];
|
data['apps'] = apps || [];
|
||||||
data['hooks'] = hooks || [];
|
data['system'] = system_parts || [];
|
||||||
|
|
||||||
if (data['hooks'].constructor !== Array) {
|
if (data['system'].constructor !== Array) {
|
||||||
data['hooks'] = [data['hooks']];
|
data['system'] = [data['system']];
|
||||||
}
|
}
|
||||||
if (data['apps'].constructor !== Array) {
|
if (data['apps'].constructor !== Array) {
|
||||||
data['apps'] = [data['apps']];
|
data['apps'] = [data['apps']];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data['hooks'].length == 0) {
|
|
||||||
data['ignore_hooks'] = '';
|
|
||||||
}
|
|
||||||
if (data['apps'].length == 0) {
|
|
||||||
data['ignore_apps'] = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Some hook value contains multiple hooks separated by commas
|
// Some hook value contains multiple hooks separated by commas
|
||||||
var split_hooks = [];
|
var split_hooks = [];
|
||||||
$.each(data['hooks'], function(i, hook) {
|
$.each(data['system'], function(i, hook) {
|
||||||
split_hooks = split_hooks.concat(hook.split(','));
|
split_hooks = split_hooks.concat(hook.split(','));
|
||||||
});
|
});
|
||||||
data['hooks'] = split_hooks;
|
data['system'] = split_hooks;
|
||||||
|
|
||||||
|
if (data['system'].length == 0) {
|
||||||
|
delete data['system'];
|
||||||
|
}
|
||||||
|
if (data['apps'].length == 0) {
|
||||||
|
delete data['apps'];
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
Handlebars.registerHelper('humanTime', function(time) {
|
Handlebars.registerHelper('humanTime', function(time) {
|
||||||
return Math.round(time) + 's';
|
return Math.round(time) + 's';
|
||||||
});
|
});
|
||||||
|
Handlebars.registerHelper('timestampToDate', function(timestamp) {
|
||||||
|
var date = new Date(timestamp * 1000);
|
||||||
|
return date.toLocaleString();
|
||||||
|
});
|
||||||
Handlebars.registerHelper('bitRate', function(bytes, time) {
|
Handlebars.registerHelper('bitRate', function(bytes, time) {
|
||||||
var sizes = ['b', 'Kb', 'Mb', 'Gb', 'Tb'];
|
var sizes = ['b', 'Kb', 'Mb', 'Gb', 'Tb'];
|
||||||
if (time === 0) return 'n/a';
|
if (time === 0) return 'n/a';
|
||||||
|
@ -49,6 +53,24 @@
|
||||||
return outStr;
|
return outStr;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Block helper to add a tooltip to any element
|
||||||
|
Handlebars.registerHelper('tooltip', function(tooltip, options) {
|
||||||
|
return new Handlebars.SafeString(
|
||||||
|
'<span data-toggle="tooltip" title="' + tooltip + '" data-placement="right">'
|
||||||
|
+ options.fn(this)
|
||||||
|
+ '</span>');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load tooltips on the page; needed if using tooltips
|
||||||
|
Handlebars.registerHelper('load_tooltips', function() {
|
||||||
|
return new Handlebars.SafeString(
|
||||||
|
'<script>'
|
||||||
|
+ '$(document).ready(function(){'
|
||||||
|
+ '$(\'[data-toggle="tooltip"]\').tooltip();'
|
||||||
|
+ '});'
|
||||||
|
+ '</script>');
|
||||||
|
});
|
||||||
|
|
||||||
// Look for supported type of storage to use
|
// Look for supported type of storage to use
|
||||||
/**
|
/**
|
||||||
* http://sammyjs.org/docs/api/0.7.4/all#Sammy.Store.LocalStorage
|
* http://sammyjs.org/docs/api/0.7.4/all#Sammy.Store.LocalStorage
|
||||||
|
@ -80,6 +102,13 @@
|
||||||
// Store url
|
// Store url
|
||||||
sam.store.set('url', window.location.hostname + '/yunohost/api');
|
sam.store.set('url', window.location.hostname + '/yunohost/api');
|
||||||
|
|
||||||
|
// Get YunoHost version
|
||||||
|
if (sam.store.get('connected')) {
|
||||||
|
this.api('/version', function(versions) {
|
||||||
|
$('#yunohost-version').html(y18n.t('footer_version', [versions.yunohost.version, versions.yunohost.repo]));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Flash messages
|
// Flash messages
|
||||||
var flashMessage = $('#flashMessage');
|
var flashMessage = $('#flashMessage');
|
||||||
$('#toggle-btn', flashMessage).click(function(e) {
|
$('#toggle-btn', flashMessage).click(function(e) {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
defaultLocale: "en",
|
defaultLocale: "en",
|
||||||
locale: "en",
|
locale: "en",
|
||||||
placeholder: /(?:\{\{|%\{)(.*?)(?:\}\}?)/gm,
|
placeholder: /(?:\{\{|%\{)(.*?)(?:\}\}?)/gm,
|
||||||
translations: {},
|
translations: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
382
src/locales/ar.json
Normal file
382
src/locales/ar.json
Normal file
|
@ -0,0 +1,382 @@
|
||||||
|
{
|
||||||
|
"action": "الإجراء",
|
||||||
|
"add": "إضافة",
|
||||||
|
"remove": "حذف",
|
||||||
|
"administration_password": "كلمة السر الإدارية",
|
||||||
|
"allowed_users": "المستخدمون المصرح لهم",
|
||||||
|
"api_not_responding": "واجهة برمجة التطبيقات API لا تستجيب",
|
||||||
|
"app_access": "النفاذ",
|
||||||
|
"app_access_addall_btn": "السماح بالنفاذ للجميع",
|
||||||
|
"app_access_addall_desc": "سيُسمح لكافة المستخدمين الموجودين النفاذ إلى %s.",
|
||||||
|
"app_access_clearall_btn": "إلغاء جميع التصريحات بالدخول",
|
||||||
|
"app_access_clearall_desc": "كافة المستخدمين سيكون لهم التصريح للنفاذ إلى %s.",
|
||||||
|
"app_access_removeall_btn": "إزالة كافة تصريحات النفاذ",
|
||||||
|
"app_access_removeall_desc": "لن يكون بإمكان أي مستخدم النفاذ إلى %s .",
|
||||||
|
"app_access_title": "النفاذ إلى %s",
|
||||||
|
"app_change_label": "تعديل التسمية",
|
||||||
|
"app_change_url": "تغيير عنوان الرابط",
|
||||||
|
"app_debug_no_logs": "سجلات هذا البرنامج غير متوفرة",
|
||||||
|
"app_debug_tab": "إظهار معلومات التنقيح",
|
||||||
|
"app_info_access_desc": "إدارة تصريحات النفاذ. المستخدمون المصرح لهم : %s",
|
||||||
|
"app_info_changelabel_desc": "تعديل تسمية البرنامج على البوابة.",
|
||||||
|
"app_info_debug_desc": "عرض معلومات التنقيح الخاصة بهذا البرنامج.",
|
||||||
|
"app_info_default_desc": "تحويل مسار جذر النطاق نحو هذا البرنامج (%s).",
|
||||||
|
"app_info_changeurl_desc": "يقوم بتغيير عنوان رابط النفاذ إلى هذا البرنامج (النطاق و/أو المسار).",
|
||||||
|
"app_info_change_url_disabled_tooltip": "لم تُهيأ هذه الخاصية لإعدادها في هذا البرنامج بعدُ",
|
||||||
|
"app_info_uninstall_desc": "حذف هذا البرنامج.",
|
||||||
|
"app_install_cancel": "تم إلغاء عملية التنصيب.",
|
||||||
|
"app_install_custom_no_manifest": "No manifest.json file",
|
||||||
|
"app_list": "قائمة البرمجيات",
|
||||||
|
"app_make_default": "تعيينه كافتراضي",
|
||||||
|
"app_repository": "مصدر البرنامج : ",
|
||||||
|
"app_state": "حالة البرنامج : ",
|
||||||
|
"app_state_inprogress": "العمل عليه متواصل",
|
||||||
|
"app_state_notworking": "لا يعمل بعدُ",
|
||||||
|
"app_state_validated": "موافَق عليها",
|
||||||
|
"app_state_working": "يشتغل",
|
||||||
|
"application": "برنامج",
|
||||||
|
"applications": "البرمجيات",
|
||||||
|
"archive_empty": "النسخة الإحتياطية فارغة",
|
||||||
|
"available": "متوفر",
|
||||||
|
"available_apps": "البرمجيات المتوفرة",
|
||||||
|
"backup": "النسخ الإحتياطي",
|
||||||
|
"backup_action": "النسخ الإحتياطي",
|
||||||
|
"backup_archive_copy": "نسخ هذا الأرشيف إلى مساحة تخزين أخرى",
|
||||||
|
"backup_archive_delete": "حذف هذا الأرشيف",
|
||||||
|
"backup_archive_download": "تنزيل هذا الأرشيف",
|
||||||
|
"backup_content": "محتوى النسخة الإحتياطية",
|
||||||
|
"backup_create": "إنشاء نسخة إحتياطية",
|
||||||
|
"backup_encryption_warning": "لا تنسى كلمة السر هذه، ستحتاجها حينما تود استعادة النسخة الإحتياطية مِن جديد",
|
||||||
|
"backup_experimental_warning": "Be aware that the backup feature is still experimental, and may not be fully reliable.",
|
||||||
|
"backup_new": "نسخة إحتياطية جديدة",
|
||||||
|
"backup_optional_encryption": "تعمية إختيارية",
|
||||||
|
"backup_optional_password": "كلمة سر إختيارية",
|
||||||
|
"backup_type": "Type",
|
||||||
|
"backups_no": "لا توجد نسخة إحتياطية",
|
||||||
|
"begin": "إبدأ",
|
||||||
|
"bit_rate": "Bit rate",
|
||||||
|
"both": "كِلاهُما",
|
||||||
|
"cancel": "إلغاء",
|
||||||
|
"check": "تحقق",
|
||||||
|
"check_mx": "تسجيل MX",
|
||||||
|
"check_stmp": "النفاذ عبر منفذ 25",
|
||||||
|
"close": "إغلاق",
|
||||||
|
"confirm_access_add": "متأكد من أنك تود إضافة تصريح بالنفاذ إلى %s لكافة المستخدمين ؟",
|
||||||
|
"confirm_access_clear": "أمتأكد مِن أنك تريد إلغاء النفاذ الكامل إلى %s ؟",
|
||||||
|
"confirm_access_remove_all": "أمتأكد مِن أنك تريد إلغاء النفاذ الكامل إلى %s ؟",
|
||||||
|
"confirm_access_remove_user": "أمتأكد مِن أنك تريد إلغاء النفاذ الكامل إلى %s لـ %s ؟",
|
||||||
|
"confirm_app_change_url": "متأكد مِن أنك تود تغيير عنوان رابط النفاذ إلى البرنامج ؟",
|
||||||
|
"confirm_app_default": "أمتأكد مِن أنك تود تعيين هذا التطبيق كبرنامج إفتراضي ؟",
|
||||||
|
"confirm_change_maindomain": "متأكد من أنك تريد تغيير النطاق الرئيسي ؟",
|
||||||
|
"confirm_delete": "هل تود حقًا حذف %s ؟",
|
||||||
|
"confirm_firewall_open": "متأكد مِن أنك تود فتح منفذ %s ؟ (بروتوكول : %s، إتصال : %s)",
|
||||||
|
"confirm_firewall_close": "متأكد مِن أنك تود إغلاق منفذ %s ؟ (بروتوكول : %s، إتصال : %s)",
|
||||||
|
"confirm_install_custom_app": "إنّ خيار تنصيب تطبيقات خارجية قد يؤثر على أمان نظامك. استخدم ذلك بكل مسؤولية و عِلم بالمخاطر.",
|
||||||
|
"confirm_install_domain_root": "لن يكون بإمكانك تنصيب أي برنامج آخر على %s. هل تريد المواصلة ؟",
|
||||||
|
"confirm_postinstall": "إنك بصدد إطلاق خطوة ما بعد التنصيب على النطاق %s. سوف تستغرق العملية بضع دقائق، لذلك *يُرجى عدم إيقاف العملية*.",
|
||||||
|
"confirm_restore": "متأكد مِن أنك تريد استعادة %s ؟",
|
||||||
|
"confirm_service_start": "متأكد مِن أنك تريد تشغيل %s ؟",
|
||||||
|
"confirm_service_stop": "متأكد من أنك تود إيقاف %s ؟",
|
||||||
|
"confirm_service_enable": "متأكد مِن أنك تريد تفعيل %s ؟",
|
||||||
|
"confirm_service_disable": "متأكد مِن أنك تريد تعطيل %s ؟",
|
||||||
|
"confirm_uninstall": "متأكد مِن أنك تريد إلغاء تنصيب %s ؟",
|
||||||
|
"confirm_update_apps": "متأكد مِن أنك تريد تحديث كافة البرمجيات ؟",
|
||||||
|
"confirm_update_packages": "متأكد مِن أنك تريد تحديث كافة الحُزم ؟",
|
||||||
|
"confirm_update_specific_app": "متأكد مِن أنك تود تحديث %s ؟",
|
||||||
|
"confirm_upnp_enable": "متأكد مِن أنك تريد تفعيل الـ UPnP ؟",
|
||||||
|
"confirm_upnp_disable": "متأكد مِن أنك تريد تعطيل الـ UPnP ؟",
|
||||||
|
"confirm_reboot_action_reboot": "متأكد من أنك تريد إعادة تشغيل الخادم ؟",
|
||||||
|
"confirm_reboot_action_shutdown": "متأكد من أنك تريد إيقاف تشغيل الخادم ؟",
|
||||||
|
"connection": "الدخول",
|
||||||
|
"copy": "نسخ",
|
||||||
|
"count_min": "%s min",
|
||||||
|
"cpu_load": "نسبة تحميل وحدة المعالَجَة المركزية",
|
||||||
|
"created_at": "تم إنشاؤه على",
|
||||||
|
"cumulative_usage": "الإستخدام التراكُميّ",
|
||||||
|
"custom_app_install": "تنصيب برنامج خاص",
|
||||||
|
"custom_app_url_only_github": "حاليا فقط مِن جيت هب",
|
||||||
|
"default": "Default",
|
||||||
|
"delete": "حذف",
|
||||||
|
"description": "الوصف",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "",
|
||||||
|
"diagnosis": "التشخيص",
|
||||||
|
"diagnosis_hide_private": "عرض معلومات و تفاصيل التشخيص دون الكشف عن البيانات الشخصية",
|
||||||
|
"diagnosis_view_private": "عرض معلومات و تفاصيل التشخيص مع إدراج البيانات الشخصية",
|
||||||
|
"diagnosis_with_private": "التشخيص بإدراج البيانات الحساسة",
|
||||||
|
"disable": "تعطيل",
|
||||||
|
"disabled": "معطل",
|
||||||
|
"disk": "وحدة التخزين",
|
||||||
|
"dns": "خدمة أسماء النطاقات",
|
||||||
|
"domain": "النطاق",
|
||||||
|
"domain_add": "إضافة نطاق",
|
||||||
|
"domain_add_dns_doc": "… و قد قُمتُ <a href='//yunohost.org/dns'>بإعداد خدمة أسماء النطاقات بصورة صحيحة</a>.",
|
||||||
|
"domain_add_dyndns_doc": "... و إني أريد الحصول على خدمة أسماء النطاقات الديناميكي.",
|
||||||
|
"domain_add_panel_with_domain": "عندي إسم نطاق …",
|
||||||
|
"domain_add_panel_without_domain": "لا أمتلك إسم نطاق …",
|
||||||
|
"domain_default": "إسم النطاق الإفتراضي",
|
||||||
|
"domain_default_desc": "إسم النطاق الإفتراضي هو النطاق الذي مِن خلاله يقوم المستخدِمون بتسجيل دخولهم.",
|
||||||
|
"domain_default_longdesc": "هذا هو إسم نطاقك الإفتراضي.",
|
||||||
|
"domain_delete_longdesc": "حذف هذا النطاق",
|
||||||
|
"domain_dns_config": "إعدادات خدمة أسماء النطاقات",
|
||||||
|
"domain_dns_longdesc": "الإطلاع على إعدادات خدمة أسماء النطاقات",
|
||||||
|
"domain_list": "قائمة النطاقات",
|
||||||
|
"domain_name": "إسم النطاق",
|
||||||
|
"domain_select": "إختيار نطاق",
|
||||||
|
"domain_visit": "زيارته",
|
||||||
|
"domain_visit_url": "زيارة %s",
|
||||||
|
"domains": "أسماء النطاقات",
|
||||||
|
"download": "التنزيل",
|
||||||
|
"enable": "تشغيل",
|
||||||
|
"enabled": "مُفَعَّل",
|
||||||
|
"error_modify_something": "يجب عليك تغيير شيء ما",
|
||||||
|
"error_occured": "طرأ هناك خطأ، يرجى إعادة المحاولة",
|
||||||
|
"error_retrieve_feed": "تعذر جلب خيط الأخبار : %s",
|
||||||
|
"error_select_domain": "يجب اختيار نطاق",
|
||||||
|
"error_server": "خطأ في الخادم",
|
||||||
|
"error_server_unexpected": "طرأ هناك خطأ غير متوقع في الخادم (%s)",
|
||||||
|
"everyone_has_access": "النفاذ إليه مسموح للجميع.",
|
||||||
|
"filesystem": "نظام الملفات",
|
||||||
|
"firewall": "الجدار الناري",
|
||||||
|
"footer_version": "مدعوم بـ <a href='https://yunohost.org'>YunoHost</a> %s (%s).",
|
||||||
|
"form_input_example": "مثال : %s",
|
||||||
|
"free": "حرة",
|
||||||
|
"fs_type": "نوع نظام الملفات",
|
||||||
|
"gateway": "بوابة العبور : ",
|
||||||
|
"home": "الرئيسية",
|
||||||
|
"hook_adminjs_group_configuration": "الإعداد",
|
||||||
|
"hook_conf_cron": "المهام العادية",
|
||||||
|
"hook_conf_ldap": "LDAP",
|
||||||
|
"hook_conf_nginx": "Nginx",
|
||||||
|
"hook_conf_ssh": "SSH",
|
||||||
|
"hook_conf_ssowat": "SSOwat",
|
||||||
|
"hook_conf_xmpp": "XMPP",
|
||||||
|
"hook_conf_ynh_certs": "شهادات الأمان",
|
||||||
|
"hook_conf_ynh_firewall": "الجدار الناري",
|
||||||
|
"hook_conf_ynh_mysql": "كلمة سر قاعدة البيانات MySQL",
|
||||||
|
"hook_data_home": "بيانات المستخدم",
|
||||||
|
"hook_data_home_desc": "بيانات المستخدم في /home/USER",
|
||||||
|
"hook_data_mail": "البريد",
|
||||||
|
"hook_data_mail_desc": "البريد المتواجد على السيرفر",
|
||||||
|
"hostname": "إسم المضيف",
|
||||||
|
"id": "ID",
|
||||||
|
"inactive": "معطّل",
|
||||||
|
"infos": "معلومات",
|
||||||
|
"install": "تنصيب",
|
||||||
|
"install_name": "تثبيت %s",
|
||||||
|
"install_time": "تاريخ التنصيب",
|
||||||
|
"installation_complete": "إكتملت عملية التنصيب",
|
||||||
|
"installed": "مُنصّب",
|
||||||
|
"installed_apps": "البرمجيات المنصبة",
|
||||||
|
"installing": "جارٍ التنصيب",
|
||||||
|
"interface": "الواجهة",
|
||||||
|
"internal_exception": "",
|
||||||
|
"io": "I/O",
|
||||||
|
"ipv4": "IPv4",
|
||||||
|
"ipv6": "IPv6",
|
||||||
|
"label": "التسمية",
|
||||||
|
"label_for_manifestname": "تسمية لـ %s",
|
||||||
|
"loading": "عملية التحميل جارية …",
|
||||||
|
"local_archives": "الأرشيف المحلي",
|
||||||
|
"local_ip": "عنوان الإيبي المحلي",
|
||||||
|
"log": "السِجِل",
|
||||||
|
"logged_in": "مُتّصل",
|
||||||
|
"logged_out": "تم تسجيل خروجك",
|
||||||
|
"login": "تسجيل الدخول",
|
||||||
|
"logout": "الخروج",
|
||||||
|
"mailbox_quota_description": "على سبيل المثال, 700M هو حجم CD، و 4700M هو حجم DVD.",
|
||||||
|
"mailbox_quota_placeholder": "قصد التعطيل أتركه فارغا أو قم بإدخال 0.",
|
||||||
|
"manage_apps": "إدارة البرمجيات",
|
||||||
|
"manage_domains": "إدراة أسماء النطاقات",
|
||||||
|
"manage_users": "إدارة المستخدمين",
|
||||||
|
"memory": "الذاكرة",
|
||||||
|
"menu": "Menu",
|
||||||
|
"mode": "Mode",
|
||||||
|
"monitoring": "المراقبة",
|
||||||
|
"monitoring_check_glances": "تحقق مِن حالة خدمة <a href='#/services/glances'>glances</a>.",
|
||||||
|
"monitoring_disabled": "المراقبة معطلة.",
|
||||||
|
"mount_point": "نقطة التنصيب Mount",
|
||||||
|
"multi_instance": "متعدد مثيلات الخوادم",
|
||||||
|
"myserver": "خادمي",
|
||||||
|
"myserver_org": "myserver.org",
|
||||||
|
"network": "الشبكة",
|
||||||
|
"next": "التالي",
|
||||||
|
"no": "لا",
|
||||||
|
"no_allowed_users": "لم يُقدَّم أي تصريح لأي مستخدم بعد.",
|
||||||
|
"no_installed_apps": "لم يتم تنصيب أي برنامج.",
|
||||||
|
"no_log": "No log.",
|
||||||
|
"no_user_to_add": "لا يوجد أي مستخدم لإضافته.",
|
||||||
|
"non_compatible_api": "واجهة برمجة التطبيقات API غير متوافقة",
|
||||||
|
"ok": "موافق",
|
||||||
|
"open": "فتح",
|
||||||
|
"operations": "الإجراءات",
|
||||||
|
"os": "نظام التشغيل",
|
||||||
|
"password": "كلمة السر",
|
||||||
|
"password_confirmation": "تأكيد كلمة السر",
|
||||||
|
"password_description": "يتوجب أن يكون طول كلمة السر %s أحرف على الأقل.",
|
||||||
|
"password_empty": "إنَّ حقل كلمة السر فارغ",
|
||||||
|
"password_new": "كلمة السر الجديدة",
|
||||||
|
"passwords_dont_match": "كلمات السر غير متطابقة",
|
||||||
|
"passwords_too_short": "كلمة السر قصيرة جدًا",
|
||||||
|
"path": "المسار",
|
||||||
|
"path_url": "المسار",
|
||||||
|
"port": "المنفذ",
|
||||||
|
"ports": "المنافذ",
|
||||||
|
"postinstall": "ما بعد التنصيب",
|
||||||
|
"postinstall_domain": "سوف يصبح هذا إسم النطاق الرئيسي المرتبط بخادوم واي يونوهوست YunoHost و الذي مِن خلاله يُمكن للمستخدمين النفاذ إلى بوابة المصادقة قصد تسجيل دخولهم. إسم النطاق هذا سيكون ظاهرا لكافة المستخدمين، لذا يتوجّب اختياره بعناية.",
|
||||||
|
"postinstall_intro_1": "هنيئًا ! تمت عملية تنصيب YunoHost بنجاح.",
|
||||||
|
"postinstall_intro_2": "لم يتبقى إلّا إكمال خطوتين لازمتين لتفعيل خدمات السيرفر.",
|
||||||
|
"postinstall_intro_3": "يمكنكم الحصول على مزيد مِن التفاصيل بزيارة <a href='//yunohost.org/postinstall' target='_blank'>صفحة التعليمات المخصصة لذلك</a>",
|
||||||
|
"postinstall_password": "سوف يتم استخدام كلمة السر هذه في إدارة كافة خدمات السيرفر. يُرجى التأني و الحِكمة عند اختيارها.",
|
||||||
|
"previous": "السابق",
|
||||||
|
"process": "Process",
|
||||||
|
"protocol": "Protocol",
|
||||||
|
"public_ip": "عنوان الإيبي العمومي : ",
|
||||||
|
"ram": "الذاكرة",
|
||||||
|
"read": "قراءة",
|
||||||
|
"read_more": "تعلم المزيد",
|
||||||
|
"reception": "تلقِّي",
|
||||||
|
"refresh_app_list": "تحديث القائمة",
|
||||||
|
"remove_access": "إلغاء تصريح النفاذ",
|
||||||
|
"restore": "إستعادة",
|
||||||
|
"running": "يشتغل",
|
||||||
|
"save": "حفظ",
|
||||||
|
"select_user": "إختر مستخدما",
|
||||||
|
"service_log": "%s log",
|
||||||
|
"service_start_on_boot": "Start on boot: ",
|
||||||
|
"service_status": "الحالة : ",
|
||||||
|
"services": "الخدمات",
|
||||||
|
"services_list": "قائمة الخدمات",
|
||||||
|
"set_default": "تعيينه كافتراضي",
|
||||||
|
"size": "الحجم",
|
||||||
|
"start": "تشغيل",
|
||||||
|
"status": "الحالة",
|
||||||
|
"stop": "إيقاف التشغيل",
|
||||||
|
"storage_create": "إضافة مساحة تخزين عن بُعد",
|
||||||
|
"storages_new": "مساحة جديدة للتخزين عن بُعد",
|
||||||
|
"storages_no": "لا توجد أية مساحة تخزين.",
|
||||||
|
"swap": "Swap",
|
||||||
|
"system": "النظام",
|
||||||
|
"system_apps": "البرمجيات",
|
||||||
|
"system_apps_nothing": "لا يوجد هناك أي برنامج بحاجة إلى تحديث.",
|
||||||
|
"system_delayed_upgrade": "ترقية أو تحديث مؤجل",
|
||||||
|
"system_delayed_upgrade_warning": "سوف يُحدَّث <b>%s</b> تلقائيا خلال الساعة القادمة.",
|
||||||
|
"system_packages": "الحزم",
|
||||||
|
"system_packages_nothing": "ليس هناك أية حزمة تحتاج إلى ترقية أو تحديث.",
|
||||||
|
"system_update": "تحديث النظام",
|
||||||
|
"system_upgrade": "تحديث النظام",
|
||||||
|
"system_upgrade_btn": "ترقية",
|
||||||
|
"system_upgrade_all_applications_btn": "تحديث كافة البرمجيات",
|
||||||
|
"system_upgrade_all_packages_btn": "تحديث كافة الحُزم",
|
||||||
|
"tcp": "TCP",
|
||||||
|
"time_since_update": "آخِر تحديث : ",
|
||||||
|
"tools": "الأدوات",
|
||||||
|
"tools_adminpw": "تعديل كلمة السر الإدارية",
|
||||||
|
"tools_adminpw_confirm_placeholder": "تأكيد كلمة السر الجديدة",
|
||||||
|
"tools_adminpw_current": "كلمة السر الحالية",
|
||||||
|
"tools_adminpw_current_placeholder": "قم بإدخال كلمتك السرية الحالية",
|
||||||
|
"tools_adminpw_new_placeholder": "إدخال كلمة السر الجديدة",
|
||||||
|
"tools_download_ca": "تنزيل هيئة شهادات الأمان SSL",
|
||||||
|
"tools_download_ca_desc": "أنقر هنا للشروع في تنزيل هيئتك لشهادات الأمان SSL",
|
||||||
|
"tools_security_feed": "إشعارات الأمان",
|
||||||
|
"tools_security_feed_no_items": "ليس هناك أية إشعارات بخصوص الأمان",
|
||||||
|
"tools_security_feed_subscribe_rss": "قم بالإكتتاب إلى إشعارات الأمان عبر RSS",
|
||||||
|
"tools_security_feed_view_items": "إظهار كافة الإشعارات الأمنية",
|
||||||
|
"tools_reboot": "إعادة تشغيل الخادم",
|
||||||
|
"tools_reboot_btn": "إعادة التشغيل",
|
||||||
|
"tools_reboot_done": "إعادة التشغيل جارية …",
|
||||||
|
"tools_rebooting": "عملية إعادة تشغيل خادومك جارية. الرجاء الإنتظار بعضا مِن الوقت ريثما يجهز ثم يمكنك العودة إلى الواجهة الإدارية. يُمكنك الضغط على زر (F5) لتحديث صفحة متصفحك.",
|
||||||
|
"tools_shutdown": "إيقاف تشغيل خادمك",
|
||||||
|
"tools_shutdown_btn": "إطفاء",
|
||||||
|
"tools_shutdown_done": "عملية إيقاف التشغيل جارية ...",
|
||||||
|
"tools_shuttingdown": "إنّ خادومك متوقف و طالما هو على هذا الحال فلن تتمكن مِن استعمال الواجهة الإدارية.",
|
||||||
|
"tools_shutdown_reboot": "إيقاف التشغيل/إعادة التشغيل",
|
||||||
|
"total": "المجموع",
|
||||||
|
"transmission": "الإرسال",
|
||||||
|
"udp": "UDP",
|
||||||
|
"unauthorized": "غير مسموح",
|
||||||
|
"uninstall": "إلغاء التنصيب",
|
||||||
|
"unknown_action": "إجراء مجهول %s",
|
||||||
|
"unknown_argument": "مُعامِل مجهول : %s",
|
||||||
|
"upload": "الرفع",
|
||||||
|
"upload_archive": "رفع نسخة إحتياطية",
|
||||||
|
"upnp": "UPnP",
|
||||||
|
"upnp_disabled": "UPnP معطّل.",
|
||||||
|
"upnp_enabled": "UPnP يشتغل.",
|
||||||
|
"uptime": "مدة التشغيل",
|
||||||
|
"url": "عنوان الرابط",
|
||||||
|
"usage": "الإستعمال",
|
||||||
|
"used": "مستعمَلة",
|
||||||
|
"user_email": "البريد الإلكتروني",
|
||||||
|
"user_emailaliases": "Mail aliases",
|
||||||
|
"user_emailforward": "تحويل البريد",
|
||||||
|
"user_fullname": "الإسم الكامل",
|
||||||
|
"user_interface_link": "واجهة المستخدم",
|
||||||
|
"user_mailbox_quota": "مساحة علبة البريد",
|
||||||
|
"user_mailbox_use": "المساحة المستعمَلة في علبة البريد",
|
||||||
|
"user_new_forward": "newforward@myforeigndomain.org",
|
||||||
|
"user_new_mail": "newmail@mydomain.org",
|
||||||
|
"user_username": "إسم المستخدم",
|
||||||
|
"user_username_edit": "تعديل حساب %s",
|
||||||
|
"users": "المستخدمون",
|
||||||
|
"users_list": "قائمة المستخدمين",
|
||||||
|
"users_new": "مستخدم جديد",
|
||||||
|
"users_no": "لا يوجد أي مستخدم.",
|
||||||
|
"versions": "Versions",
|
||||||
|
"view_user_profile": "عرض الملف الشخصي لـ %s",
|
||||||
|
"warning_first_user": "ربما يتطلًب منك <a href='#/users/create' class='alert-link'>إنشاء مستخدِم</a> أولًا.",
|
||||||
|
"write": "الكتابة",
|
||||||
|
"wrong_password": "كلمة السر خاطئة",
|
||||||
|
"yes": "نعم",
|
||||||
|
"certificate_alert_not_valid": "حرِج : إنّ شهادة الأمان الحالية لم تعُد صالحة ! لن يُصبح بالإمكان النفاذ عبر بروتوكول الـ HTTPS !",
|
||||||
|
"certificate_alert_selfsigned": "تحذير : إنّ شهادة الأمان الحالية مُوقّعة شخصيا. سوف تُظهِر متصفحات الويب رسالة تحذير قد تثير هلع الزوار الجُدد !",
|
||||||
|
"certificate_alert_letsencrypt_about_to_expire": "إن مدة صلاحية الشهادة سوف تنتهي قريبًا. سوف يتم تجديدها بصورة تلقائية.",
|
||||||
|
"certificate_alert_about_to_expire": "تحذير : إنّ مدة صلاحية الشهادة سوف تنتهي قريبًا ! و لن يتم تجديدها تلقائيًا !",
|
||||||
|
"certificate_alert_good": "حسنًا، يبدو أنّ شهادتك الحالية جيدة !",
|
||||||
|
"certificate_alert_great": "رائع ! إنك تستخدم شهادة صالحة لـ Let's Encrypt !",
|
||||||
|
"certificate_alert_unknown": "حالة الشهادة غير معروفة",
|
||||||
|
"certificate_manage": "إدارة شهادات أمان SSL",
|
||||||
|
"certificate_old_letsencrypt_app_conflict": "",
|
||||||
|
"ssl_certificate": "شهادة أمان SSL",
|
||||||
|
"confirm_cert_install_LE": "متأكد مِن أنك تريد تثبيت شهادة Let's Encrypt على هذا النطاق ؟",
|
||||||
|
"confirm_cert_regen_selfsigned": "أتريد إعادة توليد الشهادة الموقعة شخصيا لإسم النطاق هذا ؟",
|
||||||
|
"confirm_cert_manual_renew_LE": "أتريد حقا تجديد شهادة أمان Let's Encrypt الخاصة باسم النطاق هذا يدويًا ؟",
|
||||||
|
"confirm_cert_revert_to_selfsigned": "هل أنت متأكد مِن أنك تريد إعادة تشغيل النطاق بواسطة شهادة موقعة شخصيًا ؟",
|
||||||
|
"certificate": "الشهادة",
|
||||||
|
"certificate_status": "حالة الشهادة",
|
||||||
|
"certificate_authority": "هيئة الشهادات",
|
||||||
|
"validity": "مدة الصلاحية",
|
||||||
|
"domain_is_eligible_for_ACME": "يبدو أنَّ النطاق مهيأ بصورة صحيحة قصد تنصيب شهادة Let's Encrypt!",
|
||||||
|
"domain_not_eligible_for_ACME": "إنّ إسم النطاق هذا لم يُجهّز بعد لاستضافة شهادة أمان Let's Encrypt. يُرجى التحقق مِن إعدادات نظام أسماء النطاقات DNS و مِن أنّه يُمكن الإتصال بخادوم الويب عبر الـ HTTP.",
|
||||||
|
"install_letsencrypt_cert": "تنصيب شهادة Let's Encrypt",
|
||||||
|
"manually_renew_letsencrypt_message": "سيطرأ تجديد الشهادة تلقائيا خلال الأيام الـ 15 مِن اقتراب نهاية صلاحيتها. يُمكنكم تجديدها يدويا إن شئتم. (غير مُستحسَن).",
|
||||||
|
"manually_renew_letsencrypt": "تجديد الشهادة يدويًا الآن",
|
||||||
|
"meltdown": "",
|
||||||
|
"regenerate_selfsigned_cert_message": "إن كنت ترغب في ذلك، بإمكانك إعادة توليد تلك الشهادة الموقعة شخصيًا.",
|
||||||
|
"regenerate_selfsigned_cert": "إعادة توليد الشهادة الموقعة ذاتيًا",
|
||||||
|
"revert_to_selfsigned_cert_message": "إن كنت ترغب في ذلك، بإمكانك إعادة تنصيب شهادة موقعة شخصيًا. (غير مُستحسن)",
|
||||||
|
"revert_to_selfsigned_cert": "العودة إلى الشهادة الموقعة ذاتيًا",
|
||||||
|
"appslists": "قوائم البرمجيات",
|
||||||
|
"appslists_no_lists": "لا توجد قوائم للبرمجيات",
|
||||||
|
"appslists_custom": "قائمة البرمجيات الخاصة",
|
||||||
|
"appslists_manage": "إدارة قوائم البرمجيات",
|
||||||
|
"appslists_confirm_remove": "متأكد من أنك تود حذف قائمة البرمجيات هذه ؟",
|
||||||
|
"appslists_info_refresh_desc": "تحديث حالة برمجيات هذه القائمة.",
|
||||||
|
"appslists_info_remove_desc": "تطبيقات هذه القائمة لن تكون متوفرة بعد اليوم.",
|
||||||
|
"appslists_last_update": "آخر تحديث",
|
||||||
|
"appslists_unknown_list": "قائمة البرمجيات مجهولة : %s",
|
||||||
|
"appslists_community_list": "قائمة برمجيات المجتمع",
|
||||||
|
"name": "الإسم",
|
||||||
|
"install_community_appslists_info": "تتيح لك قائمة التطبيقات المجتمعية إمكانية تثبيت التطبيقات المُصانة.<br /> اطلع على القائمة كاملة على <a href='https://yunohost.org/apps_in_progress'>yunohost.org/apps_in_progress</a>.",
|
||||||
|
"install_community_appslists_warning": "",
|
||||||
|
"install_custom_app_appslists_info": "بإمكانكم استخدام قوائم تطبيقات بديلة لتنصيب تطبيقات أخرى يدعمها مجتمع واي يونوهوست YunoHost.",
|
||||||
|
"migrations": "الارتحال",
|
||||||
|
"migrations_pending": "الترحيلات المعلقة",
|
||||||
|
"migrations_done": "الترحيلات السابقة",
|
||||||
|
"migrations_no_pending": "لا توجد هناك أية ترحيلات معلقة",
|
||||||
|
"migrations_no_done": "لا توجد هناك أية ترحيلات في السابق",
|
||||||
|
"run": "شَغِّل",
|
||||||
|
"skip": "تخطي",
|
||||||
|
"confirm_migrations_skip": "إنّ تخطي التهجير غير مستحسَن. متأكد مِن أنك تريد ذلك ؟",
|
||||||
|
"service_description": "الوصف :",
|
||||||
|
"started_at": "تم تشغيله على :"
|
||||||
|
}
|
1
src/locales/br.json
Normal file
1
src/locales/br.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{}
|
|
@ -5,7 +5,7 @@
|
||||||
"allowed_users": "Zugelassene Benutzer",
|
"allowed_users": "Zugelassene Benutzer",
|
||||||
"api_not_responding": "API antwortet nicht",
|
"api_not_responding": "API antwortet nicht",
|
||||||
"app_access": "Zugriffsrechte",
|
"app_access": "Zugriffsrechte",
|
||||||
"app_access_addall_btn": "Zugriff auf alle zulassen",
|
"app_access_addall_btn": "Zugriff für alle zulassen",
|
||||||
"app_access_addall_desc": "Alle existierenden Benutzer werden Zugriff auf %s haben.",
|
"app_access_addall_desc": "Alle existierenden Benutzer werden Zugriff auf %s haben.",
|
||||||
"app_access_clearall_btn": "Alle Zugriffsrechte löschen",
|
"app_access_clearall_btn": "Alle Zugriffsrechte löschen",
|
||||||
"app_access_clearall_desc": "Jeder Benutzer wird Zugriff auf %s haben.",
|
"app_access_clearall_desc": "Jeder Benutzer wird Zugriff auf %s haben.",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"backup_archive_download": "Dieses Archiv herunterladen",
|
"backup_archive_download": "Dieses Archiv herunterladen",
|
||||||
"backup_content": "Inhalt der Datensicherung",
|
"backup_content": "Inhalt der Datensicherung",
|
||||||
"backup_create": "Sicherung erstellen",
|
"backup_create": "Sicherung erstellen",
|
||||||
"backup_encryption_warning": "Dieses Passwort wird benötigt um das Archiv wiederherzustellen. Daher bitte nicht vergessen",
|
"backup_encryption_warning": "Dieses Passwort wird benötigt, um das Archiv wiederherzustellen. Daher bitte nicht vergessen",
|
||||||
"backup_new": "Neues Backup",
|
"backup_new": "Neues Backup",
|
||||||
"backup_optional_encryption": "Optionale Verschlüsselung",
|
"backup_optional_encryption": "Optionale Verschlüsselung",
|
||||||
"backup_optional_password": "Optionales Passwort",
|
"backup_optional_password": "Optionales Passwort",
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
"logged_out": "Ausgeloggt",
|
"logged_out": "Ausgeloggt",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
"logout": "Abmelden",
|
"logout": "Abmelden",
|
||||||
"mailbox_quota_description": "",
|
"mailbox_quota_description": "Zum Beispiel, eine CD verfügt über 700M, eine über 4700M.",
|
||||||
"manage_apps": "Apps verwalten",
|
"manage_apps": "Apps verwalten",
|
||||||
"manage_domains": "Domains verwalten",
|
"manage_domains": "Domains verwalten",
|
||||||
"manage_users": "Benutzer verwalten",
|
"manage_users": "Benutzer verwalten",
|
||||||
|
@ -166,13 +166,13 @@
|
||||||
"no_allowed_users": "Keine berechtigten Benutzer.",
|
"no_allowed_users": "Keine berechtigten Benutzer.",
|
||||||
"no_installed_apps": "Keine installierten Apps.",
|
"no_installed_apps": "Keine installierten Apps.",
|
||||||
"no_log": "Kein Log.",
|
"no_log": "Kein Log.",
|
||||||
"no_user_to_add": "Keine weiteren Benutzer hinzuzufügen.",
|
"no_user_to_add": "Es gibt keine weiteren Benutzer, die hinzugefügt werden könnten.",
|
||||||
"non_compatible_api": "API nicht kompatibel",
|
"non_compatible_api": "API nicht kompatibel",
|
||||||
"open": "Öffnen",
|
"open": "Öffnen",
|
||||||
"operations": "Handlungen",
|
"operations": "Handlungen",
|
||||||
"os": "Betriebssystem",
|
"os": "Betriebssystem",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
"password_confirmation": "Passwort Bestätigung",
|
"password_confirmation": "Passwortbestätigung",
|
||||||
"password_description": "Das Passwort muss mindestens %s Zeichen enthalten.",
|
"password_description": "Das Passwort muss mindestens %s Zeichen enthalten.",
|
||||||
"password_empty": "Das Passwortfeld ist leer",
|
"password_empty": "Das Passwortfeld ist leer",
|
||||||
"password_new": "Neues Passwort",
|
"password_new": "Neues Passwort",
|
||||||
|
@ -182,9 +182,9 @@
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"ports": "Ports",
|
"ports": "Ports",
|
||||||
"postinstall": "Einrichtung",
|
"postinstall": "Einrichtung",
|
||||||
"postinstall_domain": "Dies ist die primäre Domain für deinen YunoHost Server und auch die Domain, an der sich die Benutzer anmelden werden. Daher muss diese allen Benutzern bekannt sein.",
|
"postinstall_domain": "Dies ist die primäre Domain für deinen YunoHost Server und auch die Domain, an der sich die Benutzer anmelden werden. Sie wird für alle Benutzer sichtbar sein, daher wähle die primäre Domain sorgfältig aus.",
|
||||||
"postinstall_intro_1": "Gratuliere! YunoHost wurde erfolgreich installiert.",
|
"postinstall_intro_1": "Gratuliere! YunoHost wurde erfolgreich installiert.",
|
||||||
"postinstall_intro_2": "Zwei weitere Einstellungen sind nötig um den Dienst auf deinem Server einzurichten.",
|
"postinstall_intro_2": "Zwei weitere Einstellungen sind notwendig, um den Dienst auf deinem Server zu aktivieren.",
|
||||||
"postinstall_intro_3": "Du kannst mehr Informationen in der <a href='//yunohost.org/postinstall' target='_blank'>Dokumentation</a> finden",
|
"postinstall_intro_3": "Du kannst mehr Informationen in der <a href='//yunohost.org/postinstall' target='_blank'>Dokumentation</a> finden",
|
||||||
"postinstall_password": "Dieses Passwort wird zur Verwaltung deines Servers benötigt. Wähle es mit Bedacht.",
|
"postinstall_password": "Dieses Passwort wird zur Verwaltung deines Servers benötigt. Wähle es mit Bedacht.",
|
||||||
"previous": "Zurück",
|
"previous": "Zurück",
|
||||||
|
@ -194,7 +194,7 @@
|
||||||
"ram": "Arbeitsspeicher",
|
"ram": "Arbeitsspeicher",
|
||||||
"read": "Lesen",
|
"read": "Lesen",
|
||||||
"read_more": "Weiterlesen",
|
"read_more": "Weiterlesen",
|
||||||
"reception": "Aufnahme",
|
"reception": "Empfang",
|
||||||
"refresh_app_list": "Liste aktualisieren",
|
"refresh_app_list": "Liste aktualisieren",
|
||||||
"remove_access": "Zugriffsrechte löschen",
|
"remove_access": "Zugriffsrechte löschen",
|
||||||
"restore": "Wiederherstellen",
|
"restore": "Wiederherstellen",
|
||||||
|
@ -211,7 +211,7 @@
|
||||||
"sleeping": "Stand-by-Modus",
|
"sleeping": "Stand-by-Modus",
|
||||||
"start": "Start",
|
"start": "Start",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"stop": "Beenden",
|
"stop": "Anhalten",
|
||||||
"storage_create": "Entfernten Speicher hinzufügen",
|
"storage_create": "Entfernten Speicher hinzufügen",
|
||||||
"storages_new": "Neuer entfernter Speicher",
|
"storages_new": "Neuer entfernter Speicher",
|
||||||
"storages_no": "Keine Speicher.",
|
"storages_no": "Keine Speicher.",
|
||||||
|
@ -227,7 +227,7 @@
|
||||||
"system_upgrade": "Systemaktualisierung",
|
"system_upgrade": "Systemaktualisierung",
|
||||||
"system_upgrade_btn": "Aktualisieren",
|
"system_upgrade_btn": "Aktualisieren",
|
||||||
"tcp": "TCP",
|
"tcp": "TCP",
|
||||||
"time_since_update": "Zeit seit letzer Aktualisierung: ",
|
"time_since_update": "Zeit seit letzter Aktualisierung: ",
|
||||||
"tools": "Werkzeuge",
|
"tools": "Werkzeuge",
|
||||||
"tools_adminpw": "Administratorenpasswort ändern",
|
"tools_adminpw": "Administratorenpasswort ändern",
|
||||||
"tools_adminpw_confirm_placeholder": "Neues Passwort bestätigen",
|
"tools_adminpw_confirm_placeholder": "Neues Passwort bestätigen",
|
||||||
|
@ -243,7 +243,7 @@
|
||||||
"total": "Gesamt",
|
"total": "Gesamt",
|
||||||
"transmission": "Übertragung",
|
"transmission": "Übertragung",
|
||||||
"udp": "UDP",
|
"udp": "UDP",
|
||||||
"unauthorized": "Nicht erlaubt",
|
"unauthorized": "Unauthorisiert",
|
||||||
"uninstall": "Deinstallieren",
|
"uninstall": "Deinstallieren",
|
||||||
"unknown_action": "Unbekannte Aktion: %s",
|
"unknown_action": "Unbekannte Aktion: %s",
|
||||||
"unknown_argument": "Unbekanntes Argument: %s",
|
"unknown_argument": "Unbekanntes Argument: %s",
|
||||||
|
@ -255,11 +255,11 @@
|
||||||
"uptime": "Laufzeit",
|
"uptime": "Laufzeit",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"usage": "Auslastung",
|
"usage": "Auslastung",
|
||||||
"used": "In Benutzung",
|
"used": "Benutzt",
|
||||||
"user_email": "E-Mail",
|
"user_email": "E-Mail",
|
||||||
"user_emailaliases": "E-Mail Aliase",
|
"user_emailaliases": "E-Mail Aliase",
|
||||||
"user_emailforward": "E-Mail Weiterleitung",
|
"user_emailforward": "E-Mail Weiterleitung",
|
||||||
"user_fullname": "Voller Name",
|
"user_fullname": "Vollständiger Name",
|
||||||
"user_interface_link": "Benutzeroberfläche",
|
"user_interface_link": "Benutzeroberfläche",
|
||||||
"user_mailbox_quota": "Mailbox Kontingent",
|
"user_mailbox_quota": "Mailbox Kontingent",
|
||||||
"user_new_forward": "weiterleitung@externedomain.org",
|
"user_new_forward": "weiterleitung@externedomain.org",
|
||||||
|
@ -275,5 +275,94 @@
|
||||||
"warning_first_user": "Bitte zuerst einen <a href='#/users/create' class='alert-link'>Benutzer anlegen</a>.",
|
"warning_first_user": "Bitte zuerst einen <a href='#/users/create' class='alert-link'>Benutzer anlegen</a>.",
|
||||||
"write": "Schreiben",
|
"write": "Schreiben",
|
||||||
"wrong_password": "Falsches Passwort",
|
"wrong_password": "Falsches Passwort",
|
||||||
"yes": "Ja"
|
"yes": "Ja",
|
||||||
|
"app_state_validated": "Bestätigt",
|
||||||
|
"app_state_inprogress": "in Bearbeitung",
|
||||||
|
"app_state": "Applikationsstatus: ",
|
||||||
|
"app_repository": "Applikationsherkunft ",
|
||||||
|
"app_state_notworking": "Funktioniert nicht",
|
||||||
|
"app_state_working": "Funktioniert",
|
||||||
|
"backup_experimental_warning": "Bitte beachte, dass das Backup-Feature noch experimentell ist und daher noch instabil sein könnte.",
|
||||||
|
"diagnosis": "Diagnose",
|
||||||
|
"diagnosis_hide_private": "Zeige die Diagnoseinformationen ohne persönliche Daten an",
|
||||||
|
"diagnosis_view_private": "Zeige die Diagnoseinformationen mit persönlichen Daten an",
|
||||||
|
"diagnosis_with_private": "Diagnose mit persönlichen Daten",
|
||||||
|
"dns": "DNS",
|
||||||
|
"domain_default_longdesc": "Das ist Ihre Standard-Domain.",
|
||||||
|
"domain_delete_longdesc": "Domain löschen",
|
||||||
|
"domain_dns_config": "DNS Konfiguration",
|
||||||
|
"domain_dns_longdesc": "DNS Konfiguration anzeigen",
|
||||||
|
"domain_visit": "Besuchen",
|
||||||
|
"domain_visit_url": "Besuche %s",
|
||||||
|
"error_server_unexpected": "Unerwarteter Serverfehler (%s)",
|
||||||
|
"footer_version": "Angetrieben von <a href='https://yunohost.org'>YunoHost</a> %s.",
|
||||||
|
"form_input_example": "Beispiel: %s",
|
||||||
|
"mailbox_quota_placeholder": "Leer lassen oder 0 zum Deaktivieren eintragen.",
|
||||||
|
"user_mailbox_use": "von der Mailbox verwendeter Speicherplatz",
|
||||||
|
"certificate_alert_not_valid": "KRITISCH : Das aktuelle Zertifikat ist nicht gültig ! HTTPS wird nicht funktionieren !",
|
||||||
|
"certificate_alert_selfsigned": "WARNUNG : Es wird ein selbstsigniertes Zertifikat verwendet. Der Browser wird neuen Besuchern daher eine Fehlermeldung anzeigen !",
|
||||||
|
"certificate_alert_letsencrypt_about_to_expire": "Das aktuelle Zertifikat läuft in Kürze ab. Es wird bald automatisch erneuert.",
|
||||||
|
"certificate_alert_about_to_expire": "WARNUNG : Das aktuelle Zertifikat läuft in Kürze ab ! Es wird NICHT automatisch erneuert !",
|
||||||
|
"certificate_alert_good": "Okay, das aktuelle Zertifikat scheint zu funktionieren !",
|
||||||
|
"certificate_alert_great": "Großartig ! Du verwendest ein gültiges Let's Encrypt Zertifikat !",
|
||||||
|
"certificate_alert_unknown": "Status unbekannt",
|
||||||
|
"certificate_manage": "SSL-Zertifikat verwalten",
|
||||||
|
"certificate_old_letsencrypt_app_conflict": "Die 'letsencrypt' Anwendung ist momentan installiert und verursacht einen Konflikt mit diesem Feature. Bitte deinstalliere die Anwendung zuerst, um die neue Zertifikatsverwaltungskonsole nutzen zu können.",
|
||||||
|
"ssl_certificate": "SSL-Zertifikat",
|
||||||
|
"confirm_cert_install_LE": "Willst du das Let's Encrypt Zertifikat für diese Domain installieren ?",
|
||||||
|
"confirm_cert_regen_selfsigned": "Bist du sicher, dass du das selbstsignierte Zertifikat für diese Domain erneuern willst ?",
|
||||||
|
"confirm_cert_manual_renew_LE": "Bist du sicher, dass du das Let's Encrypt Zertifikat für diese Domain manuell erneuern willst ?",
|
||||||
|
"certificate": "Zertifikat",
|
||||||
|
"certificate_status": "Zertifikatstatus",
|
||||||
|
"certificate_authority": "Zertifizierungsstelle",
|
||||||
|
"validity": "Gültigkeit",
|
||||||
|
"domain_is_eligible_for_ACME": "Die Domain scheint korrekt konfiguriert zu sein, um ein Let's Encrypt Zertifikat installieren zu können !",
|
||||||
|
"domain_not_eligible_for_ACME": "Die Domain scheint nicht korrekt konfiguriert zu sein, um ein Let's Encrypt Zertifikat installieren zu können ! Bitte überprüfe deine DNS-Konfiguration und die Erreichbarkeit deines HTTP-Servers.",
|
||||||
|
"install_letsencrypt_cert": "Let's Encrypt Zertifikat installieren",
|
||||||
|
"manually_renew_letsencrypt_message": "Das Zertifikat wird, innerhalb der letzten 15 Tage bevor es ungültig wird, automatisch erneuert. Du kannst es aber auch manuell erneuern. (Nicht empfohlen).",
|
||||||
|
"manually_renew_letsencrypt": "Jetzt manuell erneuern",
|
||||||
|
"regenerate_selfsigned_cert_message": "Wenn du willst, kannst du das selbstsigniertes Zertifikat erneuern.",
|
||||||
|
"regenerate_selfsigned_cert": "Selbstsigniertes Zertifikat erneuern",
|
||||||
|
"revert_to_selfsigned_cert_message": "Wenn du willst, kannst du erneut ein selbstsigniertes Zertifikat installieren. (Nicht empfohlen)",
|
||||||
|
"revert_to_selfsigned_cert": "In ein selbstsigniertes Zertifikat umwandeln",
|
||||||
|
"confirm_cert_revert_to_selfsigned": "Bist du sicher, dass du dieser Domain erneut ein selbstsigniertes Zertifikat zuweisen willst ?",
|
||||||
|
"confirm_service_start": "Möchtest du wirklich %s starten?",
|
||||||
|
"confirm_service_stop": "Möchtest du wirklich %s anhalten?",
|
||||||
|
"confirm_service_enable": "Möchtest du wirklich %s aktivieren?",
|
||||||
|
"confirm_service_disable": "Möchtest du wirklich %s deaktivieren?",
|
||||||
|
"confirm_update_apps": "Möchtest du wirklich alle Anwendungen aktualisieren?",
|
||||||
|
"confirm_update_packages": "Möchtest du wirklich alle Pakete aktualisieren?",
|
||||||
|
"confirm_upnp_enable": "Möchtest du wirklich UPnP aktivieren?",
|
||||||
|
"confirm_upnp_disable": "Möchtest du wirklich UPnP deaktivieren?",
|
||||||
|
"confirm_firewall_open": "Möchtest du wirklich Port %s1 öffnen? (Protokoll: %s2, Verbindung: %s3)",
|
||||||
|
"confirm_firewall_close": "Möchtest du wirklich Port %s1 schließen? (Protokoll: %s2, Verbindung: %s3)",
|
||||||
|
"remove": "Entfernen",
|
||||||
|
"confirm_update_specific_app": "Möchtest du wirklich %s aktualisieren?",
|
||||||
|
"confirm_reboot_action_reboot": "Möchtest du wirklich den Server neustarten?",
|
||||||
|
"confirm_reboot_action_shutdown": "Möchtest du wirklich den Server herunterfahren?",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "Diese Seite zeigt dir die *empfohlene* Konfiguration. Sie konfiguriert *nicht* den DNS für dich. Es liegt in deiner Verantwortung, deine Zone bei deinem Registrar entsprechend dieser Empfehlung zu konfigurieren.",
|
||||||
|
"ok": "OK",
|
||||||
|
"system_upgrade_all_applications_btn": "Aktualisiere alle Applikationen",
|
||||||
|
"system_upgrade_all_packages_btn": "Aktualisiere alle Pakete",
|
||||||
|
"tools_reboot": "Starte deine Server neu",
|
||||||
|
"tools_reboot_btn": "Neustart",
|
||||||
|
"tools_reboot_done": "Starte neu...",
|
||||||
|
"tools_rebooting": "Dein Server startet neu. Um zur Verwaltungsoberfläche zurückzukehren, musst du warten bis der Server hochgefahren ist. Feststellen kannst du es, in dem du die Seite neu lädst.",
|
||||||
|
"tools_shutdown": "Fahre deinen Server herunter",
|
||||||
|
"tools_shutdown_btn": "Herunterfahren",
|
||||||
|
"tools_shutdown_done": "Fahre herunter...",
|
||||||
|
"tools_shuttingdown": "Dein Server wird heruntergefahren. Solange dein Server ausgeschaltet ist, kannst du das Verwaltungsoberfläche nicht benutzen.",
|
||||||
|
"tools_shutdown_reboot": "Herunterfahren/Neustarten",
|
||||||
|
"appslists": "Applikationslisten",
|
||||||
|
"appslists_no_lists": "Keine Applikationslisten",
|
||||||
|
"appslists_custom": "Eigene Applikationslisten",
|
||||||
|
"appslists_manage": "Verwalte Applikationslisten",
|
||||||
|
"appslists_confirm_remove": "Möchtest du wirklich diese Applikationsliste entfernen?",
|
||||||
|
"appslists_info_refresh_desc": "Aktualisiere die Paketinformationen für diese Liste.",
|
||||||
|
"appslists_info_remove_desc": "Applikationen aus dieser Liste werden nicht mehr verfügbar sein.",
|
||||||
|
"appslists_last_update": "Letzte Aktualisierung",
|
||||||
|
"appslists_unknown_list": "Die Liste %s ist unbekannt",
|
||||||
|
"appslists_community_list": "Applikationsliste der Community",
|
||||||
|
"name": "Name",
|
||||||
|
"install_community_appslists_warning": "Nimm zur Kenntnis, dass diese Applikationen <strong>nicht</strong> offiziell sind und nicht von YunoHost gepflegt werden.<br /> Diese Applikationen sind auf eigenes Risiko zu installieren und können dein System demolieren."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,309 +1,229 @@
|
||||||
{
|
{
|
||||||
"domain" : "Domain",
|
"action": "Action",
|
||||||
"domains" : "Domains",
|
"active": "Active",
|
||||||
"password" : "Password",
|
"add": "Add",
|
||||||
"administration_password" : "Administration password",
|
"remove": "Remove",
|
||||||
"password_confirmation" : "Password confirmation",
|
"administration_password": "Administration password",
|
||||||
"password_new" : "New password",
|
"allowed_users": "Allowed users",
|
||||||
"password_description" : "Password must be at least %s characters long.",
|
"api_not_responding": "API is not responding",
|
||||||
"login" : "Login",
|
"app_access": "Access",
|
||||||
"logout" : "Logout",
|
"app_access_addall_btn": "Enable access to all",
|
||||||
"loading" : "Loading …",
|
"app_access_addall_desc": "All existing users will have access to %s.",
|
||||||
"domain_name" : "Domain name",
|
"app_access_clearall_btn": "Clear all access",
|
||||||
"myserver_org" : "myserver.org",
|
"app_access_clearall_desc": "Every user will have access to %s.",
|
||||||
"myserver" : "myserver",
|
"app_access_removeall_btn": "Remove all access",
|
||||||
"menu" : "Menu",
|
"app_access_removeall_desc": "No users will have access to %s.",
|
||||||
"id" : "ID",
|
"app_access_title": "%s access",
|
||||||
"description" : "Description",
|
"app_change_label": "Change Label",
|
||||||
"infos" : "Infos",
|
"app_change_url": "Change URL",
|
||||||
"mode" : "Mode",
|
"app_debug_no_logs": "Application's logs are not available",
|
||||||
"url" : "URL",
|
"app_debug_tab": "Display debug information",
|
||||||
"operations" : "Operations",
|
"app_info_access_desc": "Manage user access. Allowed users: %s",
|
||||||
"add" : "Add",
|
"app_info_changelabel_desc": "Change app label in the portal.",
|
||||||
"save" : "Save",
|
"app_info_debug_desc": "Display debugging information for this application.",
|
||||||
"delete" : "Delete",
|
"app_info_default_desc": "Redirect domain root to this application (%s).",
|
||||||
"default" : "Default",
|
"app_info_changeurl_desc": "Change the access URL of this application (domain and/or path).",
|
||||||
"set_default" : "Set default",
|
"app_info_change_url_disabled_tooltip": "This feature hasn't been implemented in this app yet",
|
||||||
"status" : "Status",
|
"app_info_uninstall_desc": "Remove this application.",
|
||||||
"disable" : "Disable",
|
"app_install_cancel": "Installation cancelled.",
|
||||||
"enable" : "Enable",
|
"app_install_custom_no_manifest": "No manifest.json file",
|
||||||
"disabled" : "Disabled",
|
"app_list": "App list",
|
||||||
"enabled" : "Enabled",
|
"app_make_default": "Make default",
|
||||||
"start" : "Start",
|
|
||||||
"stop" : "Stop",
|
|
||||||
"log" : "Log",
|
|
||||||
"yes" : "Yes",
|
|
||||||
"no" : "No",
|
|
||||||
"open" : "Open",
|
|
||||||
"close" : "Close",
|
|
||||||
"both" : "Both",
|
|
||||||
"home" : "Home",
|
|
||||||
"read_more" : "Read more",
|
|
||||||
"cancel" : "Cancel",
|
|
||||||
"user_interface_link" : "User interface",
|
|
||||||
|
|
||||||
"installing" : "Installing",
|
|
||||||
"installed" : "Installed",
|
|
||||||
"installation_complete" : "Installation complete",
|
|
||||||
|
|
||||||
"wrong_password" : "Wrong password",
|
|
||||||
"passwords_dont_match" : "Passwords don't match",
|
|
||||||
"passwords_too_short" : "Password is too short",
|
|
||||||
"password_empty" : "Password field is empty",
|
|
||||||
"logged_in" : "Logged in",
|
|
||||||
"logged_out" : "Logged out",
|
|
||||||
"unauthorized" : "Unauthorized",
|
|
||||||
"error_occured" : "An error occured, try again",
|
|
||||||
"error_server" : "Server error",
|
|
||||||
"error_server_unexpected" : "Unexpected server error (%s)",
|
|
||||||
"error_select_domain" : "You should indicate a domain",
|
|
||||||
"error_modify_something" : "You should modify something",
|
|
||||||
"non_compatible_api" : "Non-compatible API",
|
|
||||||
"warning_first_user" : "You probably need to <a href='#/users/create' class='alert-link'>create a user</a> first.",
|
|
||||||
"unknown_action" : "Unknown action %s",
|
|
||||||
"unknown_argument" : "Unknown argument : %s",
|
|
||||||
"api_not_responding" : "API is not responding",
|
|
||||||
"error_retrieve_feed" : "Could not retrieve feed : %s",
|
|
||||||
|
|
||||||
"confirm_delete" : "Are you sure you want to delete %s ?",
|
|
||||||
"confirm_change_maindomain" : "Are you sure you want to change the main domain ?",
|
|
||||||
"confirm_uninstall" : "Are you sure you want to uninstall %s ?",
|
|
||||||
"confirm_access_remove_all" : "Are you sure you want to remove all access to %s ?",
|
|
||||||
"confirm_access_remove_user" : "Are you sure you want to remove access to %s for %s ?",
|
|
||||||
"confirm_access_add" : "Are you sure you want to add access to %s for all users ?",
|
|
||||||
"confirm_access_clear" : "Are you sure you want to clear all access to %s ?",
|
|
||||||
"confirm_app_default" : "Are you sure you want to make this app default ?",
|
|
||||||
"confirm_service_action" : "Are you sure you want to %s %s ?",
|
|
||||||
"confirm_update_type" : "Are you sure you want update every %s ?",
|
|
||||||
|
|
||||||
"postinstall" : "Post-installation",
|
|
||||||
"postinstall_intro_1" : "Congratulations! YunoHost has been successfully installed.",
|
|
||||||
"postinstall_intro_2" : "Two more configuration steps are required to activate the services of your server.",
|
|
||||||
"postinstall_intro_3" : "You can obtain more information by visiting the <a href='//yunohost.org/postinstall' target='_blank'>appropriate documentation page</a>",
|
|
||||||
"begin" : "Begin",
|
|
||||||
"postinstall_domain" : "This is the first domain name linked to your YunoHost server, but also the one which will be used by your server's users to access the authentication portal. It will thus be visible by everyone, choose it carefully.",
|
|
||||||
"previous": "Previous",
|
|
||||||
"next": "Next",
|
|
||||||
"postinstall_password" : "This password will be used to manage everything on your server. Take the time to choose it wisely.",
|
|
||||||
"confirm_postinstall" : "You are about to launch the postinstallation process on the domain %s. It may take a few minutes, *do not interrupt the operation*.",
|
|
||||||
|
|
||||||
"application" : "Application",
|
|
||||||
"applications" : "Applications",
|
|
||||||
"install" : "Install",
|
|
||||||
"installed_apps" : "Installed apps",
|
|
||||||
"refresh_app_list" : "Refresh list",
|
|
||||||
"available_apps" : "Available apps",
|
|
||||||
"no_installed_apps" : "No installed apps.",
|
|
||||||
"app_list" : "App list",
|
|
||||||
"app_repository": "Application origin: ",
|
"app_repository": "Application origin: ",
|
||||||
"app_state": "Application state: ",
|
"app_state": "Application state: ",
|
||||||
"app_state_validated": "Validated",
|
|
||||||
"app_state_working": "Working",
|
|
||||||
"app_state_inprogress": "In progress",
|
"app_state_inprogress": "In progress",
|
||||||
"app_state_notworking": "Not working",
|
"app_state_notworking": "Not working",
|
||||||
"uninstall" : "Uninstall",
|
"app_state_validated": "Validated",
|
||||||
"install_name" : "Install %s",
|
"app_state_working": "Working",
|
||||||
"label" : "Label",
|
"application": "Application",
|
||||||
"label_for_manifestname" : "Label for %s",
|
"applications": "Applications",
|
||||||
"app_info_access_desc" : "Manage user access. Allowed users: %s",
|
|
||||||
"app_info_default_desc" : "Redirect domain root to this application (%s).",
|
|
||||||
"app_info_uninstall_desc" : "Remove this application.",
|
|
||||||
"app_info_debug_desc" : "Display debugging information for this application.",
|
|
||||||
"app_access" : "Access",
|
|
||||||
"app_make_default" : "Make default",
|
|
||||||
"app_debug_tab" : "Display debug information",
|
|
||||||
"app_debug_no_logs" : "Application logs are not available",
|
|
||||||
"app_access_title" : "%s access",
|
|
||||||
"allowed_users" : "Allowed users",
|
|
||||||
"remove_access" : "Remove access",
|
|
||||||
"view_user_profile" : "View %s's profile",
|
|
||||||
"everyone_has_access" : "Everyone has access.",
|
|
||||||
"no_allowed_users" : "No allowed users.",
|
|
||||||
"select_user" : "Select user",
|
|
||||||
"no_user_to_add" : "No more users to add.",
|
|
||||||
"app_access_addall_desc" : "All existing users will have access to %s.",
|
|
||||||
"app_access_removeall_desc" : "No users will have access to %s.",
|
|
||||||
"app_access_clearall_desc" : "Every user will have access to %s.",
|
|
||||||
"app_access_addall_btn" : "Add access to all",
|
|
||||||
"app_access_removeall_btn" : "Remove all access",
|
|
||||||
"app_access_clearall_btn" : "Clear all access",
|
|
||||||
"multi_instance" : "Multi instance",
|
|
||||||
"manage_domains" : "Manage domains",
|
|
||||||
"manage_users" : "Manage users",
|
|
||||||
"manage_apps" : "Manage apps",
|
|
||||||
"install_time" : "Install time",
|
|
||||||
"custom_app_install" : "Install custom app",
|
|
||||||
"custom_app_url_only_github" : "Currently only from GitHub",
|
|
||||||
"confirm_install_domain_root" : "You will not be able to install any other app on %s. Continue ?",
|
|
||||||
"app_install_cancel" : "Installation cancelled.",
|
|
||||||
"confirm_install_custom_app" : "Installing 3rd party applications may compromise the security of your system. Use at your own risks.",
|
|
||||||
"app_install_custom_no_manifest" : "No manifest.json file",
|
|
||||||
|
|
||||||
"domain_list" : "Domain list",
|
|
||||||
"domain_add" : "Add domain",
|
|
||||||
"domain_add_panel_with_domain" : "I already have a domain name…",
|
|
||||||
"domain_add_panel_without_domain" : "I don't have a domain name…",
|
|
||||||
"domain_add_dns_doc" : "… and I have <a href='//yunohost.org/dns'>set my DNS correctly</a>.",
|
|
||||||
"domain_add_dyndns_doc" : "… and I want a dynamic DNS service.",
|
|
||||||
"domain_default" : "Default domain",
|
|
||||||
"domain_default_desc" : "The default domain is the connection domain where users log in.",
|
|
||||||
"domain_select" : "Select domain",
|
|
||||||
"domain_default_longdesc" : "This is your default domain.",
|
|
||||||
"domain_visit_url" : "Visit %s",
|
|
||||||
"domain_visit" : "Visit",
|
|
||||||
"dns" : "DNS",
|
|
||||||
"domain_dns_longdesc" : "View DNS configuration",
|
|
||||||
"domain_dns_config" : "DNS configuration",
|
|
||||||
"domain_delete_longdesc" : "Delete this domain",
|
|
||||||
|
|
||||||
"monitoring" : "Monitoring",
|
|
||||||
"versions" : "Versions",
|
|
||||||
"hostname" : "Hostname",
|
|
||||||
"os" : "OS",
|
|
||||||
"uptime" : "Uptime",
|
|
||||||
"system" : "System",
|
|
||||||
"memory" : "Memory",
|
|
||||||
"ram" : "RAM",
|
|
||||||
"swap" : "Swap",
|
|
||||||
"used" : "Used",
|
|
||||||
"free" : "Free",
|
|
||||||
"total" : "Total",
|
|
||||||
"cpu_load" : "CPU Load",
|
|
||||||
"count_min" : "%s min",
|
|
||||||
"process" : "Process",
|
|
||||||
"running" : "Running",
|
|
||||||
"inactive" : "Inactive",
|
|
||||||
"network" : "Network",
|
|
||||||
"public_ip" : "Public IP: ",
|
|
||||||
"local_ip" : "Local IP",
|
|
||||||
"gateway" : "Gateway: ",
|
|
||||||
"interface" : "Interface",
|
|
||||||
"ipv4" : "IPv4",
|
|
||||||
"ipv6" : "IPv6",
|
|
||||||
"usage" : "Usage",
|
|
||||||
"time_since_update" : "Time since update: ",
|
|
||||||
"bit_rate" : "Bit rate",
|
|
||||||
"cumulative_usage" : "Cumulative usage",
|
|
||||||
"transmission" : "Transmission",
|
|
||||||
"reception" : "Reception",
|
|
||||||
"disk" : "Disk",
|
|
||||||
"filesystem" : "Filesystem",
|
|
||||||
"fs_type" : "FS Type",
|
|
||||||
"mount_point" : "Mount point",
|
|
||||||
"size" : "Size",
|
|
||||||
"available" : "Available",
|
|
||||||
"io" : "I/O",
|
|
||||||
"read" : "Read",
|
|
||||||
"write" : "Write",
|
|
||||||
"monitoring_disabled" : "Monitoring is not enabled.",
|
|
||||||
"monitoring_check_glances" : "Check <a href='#/services/glances'>glances</a> service status.",
|
|
||||||
"check" : "Check",
|
|
||||||
"check_stmp" : "25 port access",
|
|
||||||
"check_mx" : "MX record",
|
|
||||||
|
|
||||||
"services" : "Services",
|
|
||||||
"services_list" : "Services list",
|
|
||||||
"service_start_on_boot" : "Start on boot: ",
|
|
||||||
"service_status" : "Status: ",
|
|
||||||
"service_log" : "%s log",
|
|
||||||
|
|
||||||
"firewall" : "Firewall",
|
|
||||||
"upnp" : "UPnP",
|
|
||||||
"upnp_enabled" : "UPnP is enabled.",
|
|
||||||
"upnp_disabled" : "UPnP is disabled.",
|
|
||||||
"confirm_upnp_action" : "Are you sure you want to %s UPnP ?",
|
|
||||||
"action" : "Action",
|
|
||||||
"protocol" : "Protocol",
|
|
||||||
"connection" : "Connection",
|
|
||||||
"tcp" : "TCP",
|
|
||||||
"udp" : "UDP",
|
|
||||||
"port" : "Port",
|
|
||||||
"ports" : "Ports",
|
|
||||||
"confirm_firewall" : "Are you sure to %s port %s (protocol: %s, connection: %s)",
|
|
||||||
|
|
||||||
"tools" : "Tools",
|
|
||||||
"tools_adminpw" : "Change administration password",
|
|
||||||
"tools_adminpw_current" : "Current password",
|
|
||||||
"tools_adminpw_current_placeholder" : "Enter your current password",
|
|
||||||
"tools_adminpw_new_placeholder" : "Enter the new password",
|
|
||||||
"tools_adminpw_confirm_placeholder" : "Confirm the new password",
|
|
||||||
"tools_download_ca" : "Download SSL Certificate Authority (CA)",
|
|
||||||
"tools_download_ca_desc" : "Click here to download your SSL certificate authority (CA)",
|
|
||||||
"tools_security_feed" : "Security notifications",
|
|
||||||
"tools_security_feed_no_items" : "No security notifications",
|
|
||||||
"tools_security_feed_view_items" : "View all security notifications",
|
|
||||||
"tools_security_feed_subscribe_rss" : "Subscribe to security notifications RSS",
|
|
||||||
|
|
||||||
"system_update" : "System update",
|
|
||||||
"system_upgrade" : "System upgrade",
|
|
||||||
"system_upgrade_btn" : "Upgrade",
|
|
||||||
"system_packages" : "Packages",
|
|
||||||
"system_apps" : "Apps",
|
|
||||||
"system_packages_nothing" : "There is no packages to upgrade.",
|
|
||||||
"system_apps_nothing" : "There is no apps to upgrade.",
|
|
||||||
"no_log" : "No log.",
|
|
||||||
"system_delayed_upgrade_warning" : "<b>%s</b> will be upgraded automatically within the next hour.",
|
|
||||||
"system_delayed_upgrade" : "Delayed upgrade",
|
|
||||||
|
|
||||||
"users" : "Users",
|
|
||||||
"users_new" : "New user",
|
|
||||||
"users_no" : "No users.",
|
|
||||||
"users_list" : "Users list",
|
|
||||||
|
|
||||||
"user_username" : "Username",
|
|
||||||
"user_username_edit" : "Edit %s’s account",
|
|
||||||
"user_fullname" : "Fullname",
|
|
||||||
"user_email" : "Email",
|
|
||||||
"user_emailaliases" : "Mail aliases",
|
|
||||||
"user_emailforward" : "Mail forward",
|
|
||||||
"user_new_mail": "newmail@mydomain.org",
|
|
||||||
"user_new_forward": "newforward@myforeigndomain.org",
|
|
||||||
"user_mailbox_quota": "Mailbox quota",
|
|
||||||
"mailbox_quota_description": "For example, 700M is a CD, 4700M is a DVD.",
|
|
||||||
"mailbox_quota_placeholder": "Leave empty or 0 to disable.",
|
|
||||||
|
|
||||||
"backup" : "Backup",
|
|
||||||
"backup_experimental_warning" : "Be aware that the backup feature is still experimental, and may not be fully reliable.",
|
|
||||||
"backup_content": "Backup content",
|
|
||||||
"local_archives": "Local archives",
|
|
||||||
"storages_new": "New remote storage",
|
|
||||||
"storages_no": "No storages.",
|
|
||||||
"backup_new": "New backup",
|
|
||||||
"backups_no": "No backup",
|
|
||||||
"upload_archive": "Archive upload",
|
|
||||||
"upload": "Upload",
|
|
||||||
"archive_empty": "Empty archive",
|
"archive_empty": "Empty archive",
|
||||||
"backup_archive_delete": "Delete this archive",
|
"available": "Available",
|
||||||
|
"available_apps": "Available apps",
|
||||||
|
"backup": "Backup",
|
||||||
|
"backup_action": "Backup",
|
||||||
"backup_archive_copy": "Copy this archive on another storage",
|
"backup_archive_copy": "Copy this archive on another storage",
|
||||||
"copy": "Copy",
|
"backup_archive_delete": "Delete this archive",
|
||||||
|
"backup_archive_download": "Download this archive",
|
||||||
|
"backup_content": "Backup content",
|
||||||
"backup_create": "Create a backup",
|
"backup_create": "Create a backup",
|
||||||
"restore": "Restore",
|
"backup_encryption_warning": "Don't forget this password, you'll need it if you want restore the archive",
|
||||||
"download": "Download",
|
"backup_new": "New backup",
|
||||||
|
"backup_optional_encryption": "Optional encryption",
|
||||||
|
"backup_optional_password": "Optional password",
|
||||||
|
"backup_type": "Type",
|
||||||
|
"backups_no": "No backup",
|
||||||
|
"begin": "Begin",
|
||||||
|
"bit_rate": "Bit rate",
|
||||||
|
"both": "Both",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"check": "Check",
|
||||||
|
"check_mx": "MX record",
|
||||||
|
"check_stmp": "port 25 access",
|
||||||
|
"close": "Close",
|
||||||
|
"confirm_access_add": "Are you sure you want to add access to %s for all users ?",
|
||||||
|
"confirm_access_clear": "Are you sure you want to clear all access to %s ?",
|
||||||
|
"confirm_access_remove_all": "Are you sure you want to remove all access to %s ?",
|
||||||
|
"confirm_access_remove_user": "Are you sure you want to remove access to %s for %s ?",
|
||||||
|
"confirm_app_change_url": "Are you sure you want to change the app access URL ?",
|
||||||
|
"confirm_app_default": "Are you sure you want to make this app default ?",
|
||||||
|
"confirm_change_maindomain": "Are you sure you want to change the main domain ?",
|
||||||
|
"confirm_delete": "Are you sure you want to delete %s ?",
|
||||||
|
"confirm_firewall_open": "Are you sure you want to open port %s? (protocol: %s, connection: %s)",
|
||||||
|
"confirm_firewall_close": "Are you sure you want to close port %s? (protocol: %s, connection: %s)",
|
||||||
|
"confirm_install_custom_app": "Installing 3rd party applications may compromise the security of your system. Use at your own risk.",
|
||||||
|
"confirm_install_domain_root": "You will not be able to install any other app on %s. Continue ?",
|
||||||
|
"confirm_migrations_skip": "Skipping migrations is not recommended. Are you sure you want to do that?",
|
||||||
|
"confirm_postinstall": "You are about to launch the post-installation process on the domain %s. It may take a few minutes, *do not interrupt the operation*.",
|
||||||
|
"confirm_restore": "Are you sure you want to restore %s ?",
|
||||||
|
"confirm_service_start": "Are you sure you want to start %s?",
|
||||||
|
"confirm_service_stop": "Are you sure you want to stop %s?",
|
||||||
|
"confirm_service_enable": "Are you sure you want to enable %s?",
|
||||||
|
"confirm_service_disable": "Are you sure you want to disable %s?",
|
||||||
|
"confirm_uninstall": "Are you sure you want to uninstall %s ?",
|
||||||
|
"confirm_update_apps": "Are you sure you want to update all applications?",
|
||||||
|
"confirm_update_packages": "Are you sure you want to update all packages?",
|
||||||
|
"confirm_update_specific_app": "Are you sure you want to update %s?",
|
||||||
|
"confirm_upnp_enable": "Are you sure you want to enable UPnP?",
|
||||||
|
"confirm_upnp_disable": "Are you sure you want to disable UPnP?",
|
||||||
|
"confirm_reboot_action_reboot": "Are you sure you want to reboot your server?",
|
||||||
|
"confirm_reboot_action_shutdown": "Are you sure you want to shutdown your server?",
|
||||||
|
"connection": "Connection",
|
||||||
|
"copy": "Copy",
|
||||||
|
"count_min": "%s min",
|
||||||
|
"cpu_load": "CPU Load",
|
||||||
"created_at": "Created at",
|
"created_at": "Created at",
|
||||||
|
"cumulative_usage": "Cumulative usage",
|
||||||
|
"custom_app_install": "Install custom app",
|
||||||
|
"custom_app_url_only_github": "Currently only from GitHub",
|
||||||
|
"default": "Default",
|
||||||
|
"delete": "Delete",
|
||||||
|
"description": "Description",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "This page shows you the *recommended* configuration. It does *not* configure the DNS for you. It is your responsability to configure your DNS zone in your DNS registrar according to this recommendation.",
|
||||||
|
"diagnosis": "Diagnosis",
|
||||||
|
"diagnosis_hide_private": "Show diagnostic information without private data",
|
||||||
|
"diagnosis_view_private": "Show diagnostic information including private data",
|
||||||
|
"diagnosis_with_private": "Diagnosis with private data",
|
||||||
|
"disable": "Disable",
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"disk": "Disk",
|
||||||
|
"dns": "DNS",
|
||||||
|
"domain": "Domain",
|
||||||
|
"domain_add": "Add domain",
|
||||||
|
"domain_add_dns_doc": "… and I have <a href='//yunohost.org/dns'>set my DNS correctly</a>.",
|
||||||
|
"domain_add_dyndns_doc": "… and I want a dynamic DNS service.",
|
||||||
|
"domain_add_panel_with_domain": "I already have a domain name…",
|
||||||
|
"domain_add_panel_without_domain": "I don't have a domain name…",
|
||||||
|
"domain_default": "Default domain",
|
||||||
|
"domain_default_desc": "The default domain is the connection domain where users log in.",
|
||||||
|
"domain_default_longdesc": "This is your default domain.",
|
||||||
|
"domain_delete_longdesc": "Delete this domain",
|
||||||
|
"domain_dns_config": "DNS configuration",
|
||||||
|
"domain_dns_longdesc": "View DNS configuration",
|
||||||
|
"domain_list": "Domain list",
|
||||||
|
"domain_name": "Domain name",
|
||||||
|
"domain_select": "Select domain",
|
||||||
|
"domain_visit": "Visit",
|
||||||
|
"domain_visit_url": "Visit %s",
|
||||||
|
"domains": "Domains",
|
||||||
|
"download": "Download",
|
||||||
|
"enable": "Enable",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"error_modify_something": "You should modify something",
|
||||||
|
"error_occured": "An error occurred, try again",
|
||||||
|
"error_retrieve_feed": "Could not retrieve feed : %s",
|
||||||
|
"error_select_domain": "You should indicate a domain",
|
||||||
|
"error_server": "Server error",
|
||||||
|
"error_server_unexpected": "Unexpected server error (%s)",
|
||||||
|
"everyone_has_access": "Everyone has access.",
|
||||||
|
"filesystem": "Filesystem",
|
||||||
|
"firewall": "Firewall",
|
||||||
|
"footer_version" : "Powered by <a href='https://yunohost.org'>YunoHost</a> %s (%s).",
|
||||||
|
"form_input_example" : "Example: %s",
|
||||||
|
"free": "Free",
|
||||||
|
"fs_type": "FS Type",
|
||||||
|
"gateway": "Gateway: ",
|
||||||
|
"home": "Home",
|
||||||
|
"hook_adminjs_group_configuration": "Configuration",
|
||||||
|
"hook_conf_cron": "Regular tasks",
|
||||||
|
"hook_conf_ldap": "LDAP",
|
||||||
|
"hook_conf_nginx": "Nginx",
|
||||||
|
"hook_conf_ssh": "SSH",
|
||||||
|
"hook_conf_ssowat": "SSOwat",
|
||||||
|
"hook_conf_xmpp": "XMPP",
|
||||||
|
"hook_conf_ynh_certs": "Security certificates",
|
||||||
|
"hook_conf_ynh_firewall": "Firewall",
|
||||||
|
"hook_conf_ynh_mysql": "Password MySQL",
|
||||||
"hook_data_home": "User data",
|
"hook_data_home": "User data",
|
||||||
"hook_data_home_desc": "User data located in /home/USER",
|
"hook_data_home_desc": "User data located in /home/USER",
|
||||||
"hook_data_mail": "Mail",
|
"hook_data_mail": "Mail",
|
||||||
"hook_data_mail_desc": "Mail which are on the server",
|
"hook_data_mail_desc": "Mail which is on the server",
|
||||||
"hook_conf_ldap": "LDAP",
|
"hostname": "Hostname",
|
||||||
"hook_conf_ssh": "SSH",
|
"id": "ID",
|
||||||
"hook_conf_ynh_mysql": "Password MySQL",
|
"inactive": "Inactive",
|
||||||
"hook_conf_nginx": "Nginx",
|
"infos": "Info",
|
||||||
"hook_conf_cron": "Regular tasks",
|
"install": "Install",
|
||||||
"hook_conf_xmpp": "XMPP",
|
"install_name": "Install %s",
|
||||||
"hook_conf_ynh_firewall": "Firewall",
|
"install_time": "Install time",
|
||||||
"hook_conf_ynh_certs": "Security certificates",
|
"installation_complete": "Installation complete",
|
||||||
"hook_conf_ssowat": "SSOwat",
|
"installed": "Installed",
|
||||||
"hook_adminjs_group_configuration": "Configuration",
|
"installed_apps": "Installed apps",
|
||||||
"backup_optional_encryption": "Optional encryption",
|
"installing": "Installing",
|
||||||
"backup_optional_password": "Optional password",
|
"interface": "Interface",
|
||||||
"backup_encryption_warning": "Don't forget this password, you will need it if you want restore the archive",
|
"internal_exception": "<strong>Yunohost encountered an internal error :/</strong><br><em>Really sorry about that.<br>You should look for help on <a href=\"https://forum.yunohost.org/\">the forum</a> or <a href=\"https://chat.yunohost.org/\">the chat</a> to fix the situation, or report the bug on <a href=\"https://github.com/YunoHost/issues\">the bugtracker</a>.</em><br>The following information might be useful for the person helping you :<h3>Action</h3><pre>%s%s</pre><h3>Traceback</h3><pre>%s</pre>",
|
||||||
"backup_action": "Backup",
|
"io": "I/O",
|
||||||
"backup_archive_download": "Download this archive",
|
"ipv4": "IPv4",
|
||||||
"storage_create": "Add a remote storage",
|
"ipv6": "IPv6",
|
||||||
"confirm_restore": "Are you sure you want to restore %s ?",
|
"label": "Label",
|
||||||
"backup_type": "Type",
|
"label_for_manifestname": "Label for %s",
|
||||||
|
"loading": "Loading …",
|
||||||
|
"local_archives": "Local archives",
|
||||||
|
"local_ip": "Local IP",
|
||||||
|
"log": "Log",
|
||||||
|
"logged_in": "Logged in",
|
||||||
|
"logged_out": "Logged out",
|
||||||
|
"login": "Login",
|
||||||
|
"logout": "Logout",
|
||||||
|
"mailbox_quota_description": "For example, 700M is a CD, 4700M is a DVD.",
|
||||||
|
"mailbox_quota_placeholder": "Leave empty or set to 0 to disable.",
|
||||||
|
"manage_apps": "Manage apps",
|
||||||
|
"manage_domains": "Manage domains",
|
||||||
|
"manage_users": "Manage users",
|
||||||
|
"memory": "Memory",
|
||||||
|
"menu": "Menu",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations_pending": "Pending migrations",
|
||||||
|
"migrations_done": "Previous migrations",
|
||||||
|
"migrations_no_pending": "No pending migrations",
|
||||||
|
"migrations_no_done": "No previous migrations",
|
||||||
|
"mode": "Mode",
|
||||||
|
"monitoring": "Monitoring",
|
||||||
|
"monitoring_check_glances": "Check <a href='#/services/glances'>glances</a> service status.",
|
||||||
|
"monitoring_disabled": "Monitoring is not enabled.",
|
||||||
|
"mount_point": "Mount point",
|
||||||
|
"multi_instance": "Multi instance",
|
||||||
|
"myserver": "myserver",
|
||||||
|
"myserver_org": "myserver.org",
|
||||||
|
"network": "Network",
|
||||||
|
"next": "Next",
|
||||||
|
"no": "No",
|
||||||
|
"no_allowed_users": "No allowed users.",
|
||||||
|
"no_installed_apps": "No installed apps.",
|
||||||
|
"no_log": "No log.",
|
||||||
|
"no_user_to_add": "No more users to add.",
|
||||||
|
"non_compatible_api": "Non-compatible API",
|
||||||
|
"ok": "OK",
|
||||||
|
"open": "Open",
|
||||||
|
"operations": "Operations",
|
||||||
|
"os": "OS",
|
||||||
|
"password": "Password",
|
||||||
|
"password_confirmation": "Password confirmation",
|
||||||
|
"password_description": "Password must be at least %s characters long.",
|
||||||
|
"password_empty": "The password field is empty",
|
||||||
|
"password_new": "New password",
|
||||||
|
"passwords_dont_match": "Passwords don't match",
|
||||||
|
"passwords_too_short": "Password is too short",
|
||||||
"path": "Path",
|
"path": "Path",
|
||||||
|
|
||||||
"diagnosis" : "Diagnosis",
|
"diagnosis" : "Diagnosis",
|
||||||
"diagnosis_with_private" : "Diagnosis with private data",
|
"diagnosis_with_private" : "Diagnosis with private data",
|
||||||
"diagnosis_view_private" : "Show diagnosis with private data",
|
"diagnosis_view_private" : "Show diagnosis with private data",
|
||||||
|
@ -325,4 +245,159 @@
|
||||||
"logs_context": "Context",
|
"logs_context": "Context",
|
||||||
"logs_share_with_yunopaste": "Share with YunoPaste",
|
"logs_share_with_yunopaste": "Share with YunoPaste",
|
||||||
"logs_more": "Display more lines"
|
"logs_more": "Display more lines"
|
||||||
|
"path_url": "Path",
|
||||||
|
"port": "Port",
|
||||||
|
"ports": "Ports",
|
||||||
|
"postinstall": "Post-installation",
|
||||||
|
"postinstall_domain": "This is the first domain name linked to your YunoHost server, but also the one which will be used by your server's users to access the authentication portal. Accordingly, it will be visible by everyone, so choose it carefully.",
|
||||||
|
"postinstall_intro_1": "Congratulations! YunoHost has been successfully installed.",
|
||||||
|
"postinstall_intro_2": "Two more configuration steps are required to activate you server's services.",
|
||||||
|
"postinstall_intro_3": "You can obtain more information by visiting the <a href='//yunohost.org/postinstall' target='_blank'>appropriate documentation page</a>",
|
||||||
|
"postinstall_password": "This password will be used to manage everything on your server. Take the time to choose it wisely.",
|
||||||
|
"previous": "Previous",
|
||||||
|
"process": "Process",
|
||||||
|
"protocol": "Protocol",
|
||||||
|
"public_ip": "Public IP: ",
|
||||||
|
"ram": "RAM",
|
||||||
|
"read": "Read",
|
||||||
|
"read_more": "Read more",
|
||||||
|
"reception": "Reception",
|
||||||
|
"refresh_app_list": "Refresh list",
|
||||||
|
"remove_access": "Remove access",
|
||||||
|
"restore": "Restore",
|
||||||
|
"run": "Run",
|
||||||
|
"running": "Running",
|
||||||
|
"save": "Save",
|
||||||
|
"select_user": "Select user",
|
||||||
|
"service_description": "Description:",
|
||||||
|
"service_log": "%s log",
|
||||||
|
"service_start_on_boot": "Start on boot: ",
|
||||||
|
"service_status": "Status: ",
|
||||||
|
"services": "Services",
|
||||||
|
"services_list": "Service list",
|
||||||
|
"set_default": "Set default",
|
||||||
|
"size": "Size",
|
||||||
|
"skip": "Skip",
|
||||||
|
"start": "Start",
|
||||||
|
"started_at": "Started at:",
|
||||||
|
"status": "Status",
|
||||||
|
"stop": "Stop",
|
||||||
|
"storage_create": "Add remote storage",
|
||||||
|
"storages_new": "New remote storage",
|
||||||
|
"storages_no": "No storages.",
|
||||||
|
"swap": "Swap",
|
||||||
|
"system": "System",
|
||||||
|
"system_apps": "Apps",
|
||||||
|
"system_apps_nothing": "There are no apps to upgrade.",
|
||||||
|
"system_delayed_upgrade": "Delayed upgrade",
|
||||||
|
"system_delayed_upgrade_warning": "<b>%s</b> will be upgraded automatically within the next hour.",
|
||||||
|
"system_packages": "Packages",
|
||||||
|
"system_packages_nothing": "There are no packages to upgrade.",
|
||||||
|
"system_update": "System update",
|
||||||
|
"system_upgrade": "System upgrade",
|
||||||
|
"system_upgrade_btn": "Upgrade",
|
||||||
|
"system_upgrade_all_applications_btn": "Upgrade all applications",
|
||||||
|
"system_upgrade_all_packages_btn": "Upgrade all packages",
|
||||||
|
"tcp": "TCP",
|
||||||
|
"time_since_update": "Time since update: ",
|
||||||
|
"tools": "Tools",
|
||||||
|
"tools_adminpw": "Change administration password",
|
||||||
|
"tools_adminpw_confirm_placeholder": "Confirm the new password",
|
||||||
|
"tools_adminpw_current": "Current password",
|
||||||
|
"tools_adminpw_current_placeholder": "Enter your current password",
|
||||||
|
"tools_adminpw_new_placeholder": "Enter the new password",
|
||||||
|
"tools_download_ca": "Download SSL Certificate Authority (CA)",
|
||||||
|
"tools_download_ca_desc": "Click here to download your SSL certificate authority (CA)",
|
||||||
|
"tools_security_feed": "Security notifications",
|
||||||
|
"tools_security_feed_no_items": "No security notifications",
|
||||||
|
"tools_security_feed_subscribe_rss": "Subscribe to security notifications RSS",
|
||||||
|
"tools_security_feed_view_items": "View all security notifications",
|
||||||
|
"tools_reboot": "Reboot your server",
|
||||||
|
"tools_reboot_btn": "Reboot",
|
||||||
|
"tools_reboot_done": "Rebooting...",
|
||||||
|
"tools_rebooting": "Your server is rebooting. To return to the web administration interface you need to wait for your server to be up. You can check that by refreshing this page (F5).",
|
||||||
|
"tools_shutdown": "Shutdown your server",
|
||||||
|
"tools_shutdown_btn": "Shutdown",
|
||||||
|
"tools_shutdown_done": "Shutting down...",
|
||||||
|
"tools_shuttingdown": "Your server is powering off. As long as your server is off, you won't be able to use the web administration.",
|
||||||
|
"tools_shutdown_reboot": "Shutdown/Reboot",
|
||||||
|
"total": "Total",
|
||||||
|
"transmission": "Transmission",
|
||||||
|
"udp": "UDP",
|
||||||
|
"unauthorized": "Unauthorized",
|
||||||
|
"uninstall": "Uninstall",
|
||||||
|
"unknown_action": "Unknown action %s",
|
||||||
|
"unknown_argument": "Unknown argument : %s",
|
||||||
|
"upload": "Upload",
|
||||||
|
"upload_archive": "Archive upload",
|
||||||
|
"upnp": "UPnP",
|
||||||
|
"upnp_disabled": "UPnP is disabled.",
|
||||||
|
"upnp_enabled": "UPnP is enabled.",
|
||||||
|
"uptime": "Uptime",
|
||||||
|
"url": "URL",
|
||||||
|
"usage": "Usage",
|
||||||
|
"used": "Used",
|
||||||
|
"user_email": "Email",
|
||||||
|
"user_emailaliases": "Mail aliases",
|
||||||
|
"user_emailforward": "Mail forward",
|
||||||
|
"user_fullname": "Full name",
|
||||||
|
"user_interface_link": "User interface",
|
||||||
|
"user_mailbox_quota": "Mailbox quota",
|
||||||
|
"user_mailbox_use": "Mailbox used space",
|
||||||
|
"user_new_forward": "newforward@myforeigndomain.org",
|
||||||
|
"user_new_mail": "newmail@mydomain.org",
|
||||||
|
"user_username": "Username",
|
||||||
|
"user_username_edit": "Edit %s’s account",
|
||||||
|
"users": "Users",
|
||||||
|
"users_list": "User list",
|
||||||
|
"users_new": "New user",
|
||||||
|
"users_no": "No users.",
|
||||||
|
"versions": "Versions",
|
||||||
|
"view_user_profile": "View %s's profile",
|
||||||
|
"warning_first_user": "You probably need to <a href='#/users/create' class='alert-link'>create a user</a> first.",
|
||||||
|
"write": "Write",
|
||||||
|
"wrong_password": "Wrong password",
|
||||||
|
"yes": "Yes",
|
||||||
|
"certificate_alert_not_valid": "CRITICAL : Current certificate is not valid ! HTTPS won't work at all !",
|
||||||
|
"certificate_alert_selfsigned": "WARNING : Current certificate is self-signed. Browsers will display a spooky warning to new visitors !",
|
||||||
|
"certificate_alert_letsencrypt_about_to_expire": "Current certificate is about to expire. It should soon be renewed automatically.",
|
||||||
|
"certificate_alert_about_to_expire": "WARNING : Current certificate is about to expire ! It will NOT be renewed automatically !",
|
||||||
|
"certificate_alert_good": "Okay, current certificate looks good !",
|
||||||
|
"certificate_alert_great": "Great ! You're using a valid Let's Encrypt certificate !",
|
||||||
|
"certificate_alert_unknown": "Unknown status",
|
||||||
|
"certificate_manage" : "Manage SSL certificate",
|
||||||
|
"certificate_old_letsencrypt_app_conflict" : "The 'letsencrypt' app is currently installed and conflicts with this feature. Please uninstall it first to use the new certificate management interface.",
|
||||||
|
"ssl_certificate" : "SSL certificate",
|
||||||
|
"confirm_cert_install_LE": "Are you sure you want to install a Let's Encrypt certificate for this domain ?",
|
||||||
|
"confirm_cert_regen_selfsigned": "Are you sure you want to regenerate a self-signed certificate for this domain ?",
|
||||||
|
"confirm_cert_manual_renew_LE": "Are you sure you want to manually renew the Let's Encrypt certificate for this domain now ?",
|
||||||
|
"confirm_cert_revert_to_selfsigned": "Are you sure you want to revert this domain to a self-signed certificate ?",
|
||||||
|
"certificate" : "Certificate",
|
||||||
|
"certificate_status" : "Certificate status",
|
||||||
|
"certificate_authority" : "Certification authority",
|
||||||
|
"validity" : "Validity",
|
||||||
|
"domain_is_eligible_for_ACME" : "This domain seems correctly configured to install a Let's Encrypt certificate !",
|
||||||
|
"domain_not_eligible_for_ACME" : "This domain doesn't seem ready for a Let's Encrypt certificate. Please check your DNS configuration and HTTP server reachability.",
|
||||||
|
"install_letsencrypt_cert" : "Install a Let's Encrypt certificate",
|
||||||
|
"manually_renew_letsencrypt_message" : "Certificate will be automatically renewed during the last 15 days of validity. You can manually renew it if you want to. (Not recommended).",
|
||||||
|
"manually_renew_letsencrypt" : "Manually renew now",
|
||||||
|
"meltdown" : "You are vulnerable to the <a target=\"_blank\" href=\"https://meltdownattack.com/\">meltdown</a> critical security vulnerability. To fix that, you need to <a href=\"#/update\">update your system</a> then <a href=\"#/tools/reboot\">reboot it</a> to load the new linux kernel.",
|
||||||
|
"regenerate_selfsigned_cert_message" : "If you want, you can regenerate the self-signed certificate.",
|
||||||
|
"regenerate_selfsigned_cert" : "Regenerate self-signed certificate",
|
||||||
|
"revert_to_selfsigned_cert_message" : "If you really want to, you can reinstall a self-signed certificate. (Not recommended)",
|
||||||
|
"revert_to_selfsigned_cert" : "Revert to a self-signed certificate",
|
||||||
|
"appslists" : "Applications lists",
|
||||||
|
"appslists_no_lists" : "No applications lists",
|
||||||
|
"appslists_custom" : "Custom applications list",
|
||||||
|
"appslists_manage" : "Manage applications lists",
|
||||||
|
"appslists_confirm_remove" : "Are you sure you want to remove this applications list?",
|
||||||
|
"appslists_info_refresh_desc" : "Refresh applications status for this list.",
|
||||||
|
"appslists_info_remove_desc" : "Applications from this list will not be available anymore.",
|
||||||
|
"appslists_last_update" : "Last update",
|
||||||
|
"appslists_unknown_list" : "Unknown apps list: %s",
|
||||||
|
"appslists_community_list" : "Community applications list",
|
||||||
|
"name" : "Name",
|
||||||
|
"install_community_appslists_info" : "Community applications list allows you to install community maintained applications.<br />See the full list on <a href='https://yunohost.org/apps'>yunohost.org/apps</a>.",
|
||||||
|
"install_community_appslists_warning" : "Note that these applications packages are <strong>not</strong> official and not maintained by the YunoHost team.<br />Installing these applications is at your own risk and could break your system.",
|
||||||
|
"install_custom_app_appslists_info" : "Note that you can use alternative applications lists to install some other apps maintained by the YunoHost community."
|
||||||
}
|
}
|
||||||
|
|
6
src/locales/eo.json
Normal file
6
src/locales/eo.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"password": "Pasvorto",
|
||||||
|
"login": "Ensaluti",
|
||||||
|
"logout": "Elsaluti",
|
||||||
|
"cancel": "Nuligi"
|
||||||
|
}
|
|
@ -3,196 +3,263 @@
|
||||||
"add": "Añadir",
|
"add": "Añadir",
|
||||||
"administration_password": "Contraseña de administración",
|
"administration_password": "Contraseña de administración",
|
||||||
"allowed_users": "Usuarios permitidos",
|
"allowed_users": "Usuarios permitidos",
|
||||||
"api_not_responding": "API no está respondiendo",
|
"api_not_responding": "La API no está respondiendo",
|
||||||
"app_access": "Acceso",
|
"app_access": "Acceso",
|
||||||
"app_access_addall_btn": "Añadir el acceso a toda",
|
"app_access_addall_btn": "Habilitar acceso para todos",
|
||||||
"app_access_addall_desc": "Todos los usuarios existentes tendrán acceso a %s.",
|
"app_access_addall_desc": "Todos los usuarios existentes tendrán acceso a %s 1.",
|
||||||
"app_access_clearall_btn": "Desactive todos los accesos",
|
"app_access_clearall_btn": "Desactive todos los accesos",
|
||||||
"app_access_clearall_desc": "Cada usuario tendrá acceso a %s.",
|
"app_access_clearall_desc": "Cada usuario tendrá acceso a %s 2.",
|
||||||
"app_access_removeall_btn": "Retire todos los accesos",
|
"app_access_removeall_btn": "Eliminar todos los accesos",
|
||||||
"app_access_removeall_desc": "No hay usuarios tendrán acceso a %s.",
|
"app_access_removeall_desc": "Ningún usuario tendrá acceso a %s 3.",
|
||||||
"app_access_title": "%s acceso",
|
"app_access_title": "Acceso %s 4",
|
||||||
"app_info_access_desc": "Administrar acceso de usarios. Usarios permitidos: %s",
|
"app_debug_no_logs": "Los registros de la aplicación no están disponibles",
|
||||||
"app_info_default_desc": "Redireccionar la raíz de dominio para esta aplicación (%s).",
|
"app_debug_tab": "Mostrar información de depuración",
|
||||||
|
"app_info_access_desc": "Administrar el acceso de usuarios. Usuarios permitidos: %s 5",
|
||||||
|
"app_info_debug_desc": "Mostrar información de depuración para esta aplicación.",
|
||||||
|
"app_info_default_desc": "Redirigir la raíz del dominio para esta aplicación (%s 6).",
|
||||||
"app_info_uninstall_desc": "Eliminar a esta aplicación.",
|
"app_info_uninstall_desc": "Eliminar a esta aplicación.",
|
||||||
"app_install_cancel": "Instalación cancelada. ",
|
"app_install_cancel": "Instalación cancelada.",
|
||||||
"app_install_custom_no_manifest": "El archivo manifest.json no estaba encontrado ",
|
"app_install_custom_no_manifest": "Archivo manifest.json no encontrado",
|
||||||
"app_list": "Lista de aplicaciones",
|
"app_list": "Lista de aplicaciones",
|
||||||
"app_make_default": "Hacer por defecto",
|
"app_make_default": "Establecer como predeterminado",
|
||||||
|
"app_repository": "Origen de la aplicación: ",
|
||||||
|
"app_state": "Estado de la aplicación: ",
|
||||||
|
"app_state_inprogress": "En progreso",
|
||||||
|
"app_state_notworking": "No está funcionado",
|
||||||
|
"app_state_validated": "Validado",
|
||||||
|
"app_state_working": "Funcionando",
|
||||||
"application": "Aplicación",
|
"application": "Aplicación",
|
||||||
"applications": "Aplicaciones",
|
"applications": "Aplicaciones",
|
||||||
|
"archive_empty": "Archivo vacío",
|
||||||
"available": "Disponible",
|
"available": "Disponible",
|
||||||
"available_apps": "Aplicaciones disponibles",
|
"available_apps": "Aplicaciones disponibles",
|
||||||
"backup": "Sistema de copia de seguridad",
|
"backup": "Sistema de copia de seguridad",
|
||||||
|
"backup_action": "Copia de seguridad",
|
||||||
|
"backup_archive_copy": "Copiar este archivo en otro almacén",
|
||||||
|
"backup_archive_delete": "Eliminar este archivo",
|
||||||
|
"backup_archive_download": "Bajar este archivo",
|
||||||
|
"backup_content": "Contenido de la copia de la seguridad",
|
||||||
|
"backup_create": "Crear copia de seguridad",
|
||||||
|
"backup_encryption_warning": "No olvide esta contraseña, la necesitará para restaurar el archivo",
|
||||||
|
"backup_experimental_warning": "Tenga en cuenta que la función de copia de seguridad es todavía experimental, y puede no ser totalmente fiable.",
|
||||||
|
"backup_new": "Nueva copia de seguridad",
|
||||||
|
"backup_optional_encryption": "Cifrado opcional",
|
||||||
|
"backup_optional_password": "Contraseña opcional",
|
||||||
|
"backup_type": "Tipo",
|
||||||
"backup_warning_desc": "Usted debe tener cuidado de realizar copias de seguridad de datos para usted mismo ahora.",
|
"backup_warning_desc": "Usted debe tener cuidado de realizar copias de seguridad de datos para usted mismo ahora.",
|
||||||
"backup_warning_title": "El sistema de copia de seguridad no se ha implementado todavía.",
|
"backup_warning_title": "El sistema de copia de seguridad no se ha implementado todavía.",
|
||||||
|
"backups_no": "No hay copia de seguridad",
|
||||||
"begin": "Empezar",
|
"begin": "Empezar",
|
||||||
"bit_rate": "Velocidad de grabación",
|
"bit_rate": "Tasa de bits",
|
||||||
"both": "Ambos",
|
"both": "Ambos",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"close": "Cerca",
|
"check": "Comprobar",
|
||||||
"confirm_access_add": "¿Está seguro que desea agregar el acceso a %s para todos los usuarios?",
|
"check_mx": "Registro MX",
|
||||||
|
"check_stmp": "Acceso al puerto 25",
|
||||||
|
"close": "Cerrar",
|
||||||
|
"confirm_access_add": "¿Está seguro que desea añadir el acceso a %s para todos los usuarios?",
|
||||||
"confirm_access_clear": "¿Está seguro que desea borrar todos los accesos a %s?",
|
"confirm_access_clear": "¿Está seguro que desea borrar todos los accesos a %s?",
|
||||||
"confirm_access_remove_all": "¿Está seguro de que desea eliminar todos los accesos a %s?",
|
"confirm_access_remove_all": "¿Está seguro de que desea eliminar todos los accesos a %s?",
|
||||||
"confirm_access_remove_user": "¿Está seguro que desea eliminar el acceso a %s para %s?",
|
"confirm_access_remove_user": "¿Está seguro que desea eliminar el acceso a %s para %s?",
|
||||||
"confirm_app_default": "¿Está seguro que desea hacer esta aplicación predeterminada?",
|
"confirm_app_default": "¿Está seguro que desea convertir esta aplicación en predeterminada?",
|
||||||
"confirm_change_maindomain": "¿Está seguro de que desea cambiar el dominio principal?",
|
"confirm_change_maindomain": "¿Está seguro de que desea cambiar el dominio principal?",
|
||||||
"confirm_delete": "¿Está seguro que desea eliminar %s?",
|
"confirm_delete": "¿Está seguro que desea eliminar %s?",
|
||||||
"confirm_firewall": "Estás seguro de %s puerto %s (protocolo: %s, conexión: %s)",
|
"confirm_firewall": "Está seguro de %s puerto %s (protocolo: %s, conexión: %s)",
|
||||||
"confirm_install_custom_app": "Instalación de aplicaciones 3 ª parte puede comprometer la seguridad de su sistema. Utilice a su propio riesgo. ",
|
"confirm_install_custom_app": "La instalación de aplicaciones de terceras partes puede comprometer la seguridad de su sistema. Hágalo bajo su responsabilidad.",
|
||||||
"confirm_install_domain_root": "Usted no será capaz de instalar cualquier otra aplicación en %s. Continuar? ",
|
"confirm_install_domain_root": "No podrá instalar otra aplicación en %s. ¿Desea continuar?",
|
||||||
"confirm_postinstall": "Usted está a punto de lanzar el proceso de post instalación en el dominio %s. Puede tardar pocos minutos, *no interrumpa la operación*.",
|
"confirm_postinstall": "Está a punto de lanzar el proceso de post-instalación para el dominio %s. Puede tardar unos pocos minutos, *no interrumpa la operación*.",
|
||||||
"confirm_service_action": "¿Seguro de que deseas %s %s?",
|
"confirm_restore": "¿Está seguro que desea restaurar %s?",
|
||||||
|
"confirm_service_action": "¿Estás seguro que deseas %s %s?",
|
||||||
"confirm_uninstall": "¿Está seguro que desea desinstalar %s?",
|
"confirm_uninstall": "¿Está seguro que desea desinstalar %s?",
|
||||||
"confirm_update_type": "¿Seguro que deseas actualizar cada %s? ",
|
"confirm_update_type": "¿Está que desea actualizar cada %s?",
|
||||||
"confirm_upnp_action": "¿Seguro de que deseas %s UPnP?",
|
"confirm_upnp_action": "¿Está seguro que desea %s UPnP?",
|
||||||
"connection": "Conexión",
|
"connection": "Conexión",
|
||||||
|
"copy": "Copia",
|
||||||
"count_min": "Min %s",
|
"count_min": "Min %s",
|
||||||
"cpu_load": "Carga de la CPU",
|
"cpu_load": "Carga de la CPU",
|
||||||
|
"created_at": "Creado en",
|
||||||
"cumulative_usage": "Uso acumulado",
|
"cumulative_usage": "Uso acumulado",
|
||||||
"custom_app_install": "Instalar aplicación especializado",
|
"custom_app_install": "Instalar aplicación personalizada",
|
||||||
"custom_app_url_only_github": "Por ahora solamente de fuentes en GitHub. ",
|
"custom_app_url_only_github": "Por ahora solo desde GitHub",
|
||||||
"default": "Defecto",
|
"default": "Predeterminado",
|
||||||
"delete": "Suprimir",
|
"delete": "Suprimir",
|
||||||
"description": "Descripción",
|
"description": "Descripción",
|
||||||
|
"diagnosis": "Diagnóstico",
|
||||||
|
"diagnosis_hide_private": "Mostrar diagnóstico sin los datos privados",
|
||||||
|
"diagnosis_view_private": "Mostrar diagnóstico incluyendo datos privados",
|
||||||
|
"diagnosis_with_private": "Diagnóstico con datos privados",
|
||||||
"disable": "Inhabilitar",
|
"disable": "Inhabilitar",
|
||||||
|
"disabled": "Desactivado",
|
||||||
"disk": "Disco",
|
"disk": "Disco",
|
||||||
"domain": "Nombres de dominio",
|
"dns": "DNS",
|
||||||
|
"domain": "Dominio",
|
||||||
"domain_add": "Añadir dominio",
|
"domain_add": "Añadir dominio",
|
||||||
"domain_add_dns_doc": "... Y me he puesto <a href='//yunohost.org/dns'> mi DNS correctamente</a>.",
|
"domain_add_dns_doc": "... y tengo <a href='//yunohost.org/dns'>mi DNS correctamente configurado</a>.",
|
||||||
"domain_add_dyndns_doc": "…Y yo quiero un servicio de DNS dinámico.",
|
"domain_add_dyndns_doc": "…y quiero un servicio de DNS dinámico.",
|
||||||
"domain_add_panel_with_domain": "Ya tengo un nombre de dominio...",
|
"domain_add_panel_with_domain": "Ya tengo un nombre de dominio…",
|
||||||
"domain_add_panel_without_domain": "No tengo un nombre de dominio…",
|
"domain_add_panel_without_domain": "No tengo un nombre de dominio…",
|
||||||
"domain_default": "Dominio defecto",
|
"domain_default": "Dominio predeterminado",
|
||||||
"domain_default_desc": "El dominio predeterminado es el dominio de conexión donde los usuarios entrada.",
|
"domain_default_desc": "El dominio predeterminado es el dominio donde los usuarios inician sesión.",
|
||||||
|
"domain_default_longdesc": "Este es su dominio predeterminado.",
|
||||||
|
"domain_delete_longdesc": "Eliminar este dominio",
|
||||||
|
"domain_dns_config": "Configuración DNS",
|
||||||
|
"domain_dns_longdesc": "Ver configuración DNS",
|
||||||
"domain_list": "Lista de dominios",
|
"domain_list": "Lista de dominios",
|
||||||
"domain_name": "Nombre de dominio",
|
"domain_name": "Nombre de dominio",
|
||||||
"domain_select": "Seleccione dominio",
|
"domain_select": "Seleccione un dominio",
|
||||||
|
"domain_visit": "Visitar",
|
||||||
|
"domain_visit_url": "Visita %s",
|
||||||
"domains": "Nombres de dominio",
|
"domains": "Nombres de dominio",
|
||||||
"enable": "Permitir",
|
"download": "Bajar",
|
||||||
|
"enable": "Habilitar",
|
||||||
|
"enabled": "Habilitado",
|
||||||
"error_modify_something": "Debe modificar algo",
|
"error_modify_something": "Debe modificar algo",
|
||||||
"error_occured": "Ha ocurrido un error, inténtalo de nuevo",
|
"error_occured": "Ha ocurrido un error, inténtelo de nuevo",
|
||||||
"error_retrieve_feed": "No se pudo recuperar el canal : %s",
|
"error_retrieve_feed": "No se pudo recuperar el canal: %s",
|
||||||
"error_select_domain": "Usted debe indicar un dominio",
|
"error_select_domain": "Debe indicar un dominio",
|
||||||
"error_server": "Error del servidor",
|
"error_server": "Error del servidor",
|
||||||
|
"error_server_unexpected": "Error inesperado en el servidor (%s)",
|
||||||
"everyone_has_access": "Todo el mundo tiene acceso.",
|
"everyone_has_access": "Todo el mundo tiene acceso.",
|
||||||
"filesystem": "Sistema de archivos",
|
"filesystem": "Sistema de archivos",
|
||||||
"firewall": "Firewall",
|
"firewall": "Cortafuegos",
|
||||||
"free": "Libre",
|
"free": "Libre",
|
||||||
"fs_type": "Tipo de sitema de archivos",
|
"fs_type": "Tipo de sistema de archivos",
|
||||||
"gateway": "Puerta:",
|
"gateway": "Puerta: ",
|
||||||
"home": "Inicio",
|
"home": "Inicio",
|
||||||
"hostname": "Nombre de anfitrión",
|
"hook_adminjs_group_configuration": "Configuración",
|
||||||
|
"hook_conf_cron": "Tareas periódicas",
|
||||||
|
"hook_conf_ldap": "LDAP",
|
||||||
|
"hook_conf_nginx": "Nginx",
|
||||||
|
"hook_conf_ssh": "SSH",
|
||||||
|
"hook_conf_ssowat": "SSOwat",
|
||||||
|
"hook_conf_xmpp": "XMPP",
|
||||||
|
"hook_conf_ynh_certs": "Certificados de seguridad",
|
||||||
|
"hook_conf_ynh_firewall": "Cortafuegos",
|
||||||
|
"hook_conf_ynh_mysql": "Contraseña de MySQL",
|
||||||
|
"hook_data_home": "Datos de usuario",
|
||||||
|
"hook_data_home_desc": "Datos de usuario en /home/USUARIO",
|
||||||
|
"hook_data_mail": "Correo",
|
||||||
|
"hook_data_mail_desc": "Correo en el servidor",
|
||||||
|
"hostname": "Nombre del anfitrión",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
|
"inactive": "Inactivo",
|
||||||
"infos": "Información",
|
"infos": "Información",
|
||||||
"install": "Instalar",
|
"install": "Instalar",
|
||||||
"install_name": "Instale %s",
|
"install_name": "Instalar %s",
|
||||||
"install_time": "Tiempo de installation",
|
"install_time": "Tiempo de instalación",
|
||||||
"installation_complete": "Instalación completa",
|
"installation_complete": "Instalación finalizada",
|
||||||
"installed": "Instalado",
|
"installed": "Instalado",
|
||||||
"installed_apps": "Aplicaciones instaladas",
|
"installed_apps": "Aplicaciones instaladas",
|
||||||
"installing": "Instalación",
|
"installing": "Instalando",
|
||||||
"interface": "Interfaz",
|
"interface": "Interfaz",
|
||||||
"io": "I/O",
|
"io": "I/O",
|
||||||
"ipv4": "IPv4",
|
"ipv4": "IPv4",
|
||||||
"ipv6": "IPv6",
|
"ipv6": "IPv6",
|
||||||
"label": "Etiqueta",
|
"label": "Etiqueta",
|
||||||
"label_for_manifestname": "Etiqueta para %s",
|
"label_for_manifestname": "Etiqueta para %s",
|
||||||
"loading": "Sobrecarga",
|
"loading": "Cargando…",
|
||||||
|
"local_archives": "Archivos locales",
|
||||||
"local_ip": "IP local",
|
"local_ip": "IP local",
|
||||||
"log": "Log",
|
"log": "Registro",
|
||||||
"logged_in": "Identificados",
|
"logged_in": "Sesión iniciada",
|
||||||
"logged_out": "Sesión cerrada",
|
"logged_out": "Sesión cerrada",
|
||||||
"login": "Iniciar sesión",
|
"login": "Iniciar sesión",
|
||||||
"logout": "Logout",
|
"logout": "Cerrar sesión",
|
||||||
"manage_apps": "gestionar apps",
|
"mailbox_quota_description": "Por ejemplo, 700M es un CD y 4700M es un DVD.",
|
||||||
|
"mailbox_quota_placeholder": "Dejar en blanco o usar 0 para desactivarlo.",
|
||||||
|
"manage_apps": "Gestión aplicaciones",
|
||||||
"manage_domains": "Gestión de dominios",
|
"manage_domains": "Gestión de dominios",
|
||||||
"manage_users": "Gestión de usuarios",
|
"manage_users": "Gestión de usuarios",
|
||||||
"memory": "Memoria",
|
"memory": "Memoria",
|
||||||
"menu": "Menú",
|
"menu": "Menú",
|
||||||
"mode": "Modo",
|
"mode": "Modo",
|
||||||
"monitoring": "Monitoreo",
|
"monitoring": "Monitoreo",
|
||||||
"monitoring_check_glances": "Vea el estado del servicio <a href='#/services/glances'>glances</a>.",
|
"monitoring_check_glances": "Revise el estado del servicio <a href='#/services/glances'>glances</a>.",
|
||||||
"monitoring_disabled": "El monitoreo no está habilitada.",
|
"monitoring_disabled": "La monitorización no está habilitada.",
|
||||||
"mount_point": "Punto de montaje",
|
"mount_point": "Punto de montaje",
|
||||||
"multi_instance": "Instancia multi",
|
"multi_instance": "Instancias múltiples",
|
||||||
"myserver": "miservidor",
|
"myserver": "miservidor",
|
||||||
"myserver_org": "miservidor.org",
|
"myserver_org": "miservidor.org",
|
||||||
"network": "Red",
|
"network": "Red",
|
||||||
"next": "Próximo",
|
"next": "Próximo",
|
||||||
"no": "No",
|
"no": "No",
|
||||||
"no_allowed_users": "No se permiten a los usuarios.",
|
"no_allowed_users": "No hay usuarios permitidos.",
|
||||||
"no_installed_apps": "No aplicaciones instaladas.",
|
"no_installed_apps": "No hay aplicaciones instaladas.",
|
||||||
"no_log": "Ningún registro.",
|
"no_log": "Ningún registro.",
|
||||||
"no_user_to_add": "No más usuarios a añadir.",
|
"no_user_to_add": "No hay más usuarios para añadir.",
|
||||||
"non_compatible_api": "API no compatible",
|
"non_compatible_api": "API no compatible",
|
||||||
"open": "Abierto",
|
"open": "Abierto",
|
||||||
"operations": "Operación",
|
"operations": "Operaciones",
|
||||||
"os": "Sistema operativo",
|
"os": "Sistema operativo",
|
||||||
"password": "Contraseña",
|
"password": "Contraseña",
|
||||||
"password_confirmation": "Contraseña de confirmación",
|
"password_confirmation": "Confirmación contraseña",
|
||||||
"password_description": "El contraseña debe ser al menos %s impresión.",
|
"password_description": "La contraseña debe contener al menos %s caracteres.",
|
||||||
"password_empty": "Campo contraseña está vacío",
|
"password_empty": "El campo de la contraseña está vacío",
|
||||||
"password_new": "Nueva contraseña",
|
"password_new": "Nueva contraseña",
|
||||||
"passwords_dont_match": "La contraseña no coinciden",
|
"passwords_dont_match": "Las contraseñas no coinciden",
|
||||||
"passwords_too_short": "La contraseña es demasiado corta",
|
"passwords_too_short": "La contraseña es demasiado corta",
|
||||||
|
"path": "Ruta",
|
||||||
"port": "Puerto",
|
"port": "Puerto",
|
||||||
"ports": "Puertos",
|
"ports": "Puertos",
|
||||||
"postinstall": "después de la instalación",
|
"postinstall": "Post-instalación",
|
||||||
"postinstall_domain": "Este es el primer nombre de dominio vinculado a su servidor YunoHost, pero también el que será utilizado por los usuarios de su servidor para acceder al portal de autenticación. Así pues, será visible por todos, elegir con cuidado.",
|
"postinstall_domain": "Este es el primer nombre de dominio vinculado a su servidor YunoHost, pero también el que será utilizado por los usuarios para acceder al portal de identificación. Será visible por todos, elegir con cuidado.",
|
||||||
"postinstall_intro_1": "¡Felicitaciones! YunoHost se ha instalado correctamente.",
|
"postinstall_intro_1": "¡Felicitaciones! YunoHost se ha instalado correctamente.",
|
||||||
"postinstall_intro_2": "Se requieren dos más pasos de configuración para activar los servicios de su servidor.",
|
"postinstall_intro_2": "Todavía faltan dos pasos más para activar los servicios de su servidor.",
|
||||||
"postinstall_intro_3": "Más información está disponible en <a href='//yunohost.org/postinstall' target='_blank'>la pagina de documentación pertinente</a>",
|
"postinstall_intro_3": "Más información disponible en <a href='//yunohost.org/postinstall' target='_blank'></a>",
|
||||||
"postinstall_password": "Esta contraseña se utiliza para gestionar todo lo que en su servidor. Tómese su tiempo para elegir sabiamente.",
|
"postinstall_password": "Esta contraseña se utiliza para gestionar todo su servidor. Tómese su tiempo para elegirla sabiamente.",
|
||||||
"previous": "Anterior",
|
"previous": "Anterior",
|
||||||
"process": "Proceso",
|
"process": "Proceso",
|
||||||
"protocol": "Protocolo",
|
"protocol": "Protocolo",
|
||||||
"public_ip": "IP pública:",
|
"public_ip": "IP pública: ",
|
||||||
"ram": "RAM",
|
"ram": "RAM",
|
||||||
"read": "Leer",
|
"read": "Leer",
|
||||||
"read_more": "Leer más",
|
"read_more": "Leer más",
|
||||||
"reception": "Recepción",
|
"reception": "Recepción",
|
||||||
"refresh_app_list": "Actualizar lista",
|
"refresh_app_list": "Actualizar lista",
|
||||||
"remove_access": "Elimine el acceso",
|
"remove_access": "Elimine el acceso",
|
||||||
"running": "Marcha",
|
"restore": "Restaurar",
|
||||||
|
"running": "Funcionando",
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"select_user": "Seleccionar usuario",
|
"select_user": "Seleccionar usuario",
|
||||||
"service_log": "%s log",
|
"service_log": "%s log",
|
||||||
"service_start_on_boot": "Lanzamiento en arranque",
|
"service_start_on_boot": "Inicio en el arranque: ",
|
||||||
"service_status": "Estado:",
|
"service_status": "Estado: ",
|
||||||
"services": "Servicios",
|
"services": "Servicios",
|
||||||
"services_list": "Lista de servicios",
|
"services_list": "Lista de servicios",
|
||||||
"set_default": "Conjunto defecto",
|
"set_default": "Establecer predeterminado",
|
||||||
"size": "Tamaño",
|
"size": "Tamaño",
|
||||||
"sleeping": "Dormido",
|
"sleeping": "Dormido",
|
||||||
"start": "Empezar",
|
"start": "Empezar",
|
||||||
"status": "Status",
|
"status": "Estado",
|
||||||
"stop": "Parada",
|
"stop": "Stop",
|
||||||
|
"storage_create": "Añadir almacenamiento remoto",
|
||||||
|
"storages_new": "Nuevo almacenamiento remoto",
|
||||||
|
"storages_no": "Sin almacenamiento.",
|
||||||
"swap": "Swap",
|
"swap": "Swap",
|
||||||
"system": "Sitema",
|
"system": "Sistema",
|
||||||
"system_apps": "Aplicaciones",
|
"system_apps": "Aplicaciones",
|
||||||
"system_apps_nothing": "No hay aplicaciones para actualizar.",
|
"system_apps_nothing": "No hay aplicaciones para actualizar.",
|
||||||
"system_delayed_upgrade": "Actualiza demorada",
|
"system_delayed_upgrade": "Retraso en actualización",
|
||||||
"system_delayed_upgrade_warning": "<b>%s</b> sera actualizada automáticamente en la próxima hora.",
|
"system_delayed_upgrade_warning": "<b>%s</b> será actualizada automáticamente en la próxima hora.",
|
||||||
"system_packages": "Paquetes",
|
"system_packages": "Paquetes",
|
||||||
"system_packages_nothing": "No hay actualizaciones de paquetes.",
|
"system_packages_nothing": "No hay paquetes para actualizar.",
|
||||||
"system_update": "Actualización del sistema",
|
"system_update": "Actualización del sistema",
|
||||||
"system_upgrade": "Actualización del sistema",
|
"system_upgrade": "Actualización del sistema",
|
||||||
"system_upgrade_btn": "Actualización",
|
"system_upgrade_btn": "Actualización",
|
||||||
"tcp": "TCP",
|
"tcp": "TCP",
|
||||||
"time_since_update": "Tiempo desde la actualización:",
|
"time_since_update": "Tiempo desde la actualización: ",
|
||||||
"tools": "Instrumentos",
|
"tools": "Herramientas",
|
||||||
"tools_adminpw": "Cambiar contraseña del administrador",
|
"tools_adminpw": "Cambiar contraseña del administrador",
|
||||||
"tools_adminpw_confirm_placeholder": "Confirme la nueva contraseña",
|
"tools_adminpw_confirm_placeholder": "Confirme la nueva contraseña",
|
||||||
"tools_adminpw_current": "Contraseña actual",
|
"tools_adminpw_current": "Contraseña actual",
|
||||||
"tools_adminpw_current_placeholder": "Ingrese su contraseña actual",
|
"tools_adminpw_current_placeholder": "Introduzca su contraseña actual",
|
||||||
"tools_adminpw_new_placeholder": "Introduzca la nueva contraseña",
|
"tools_adminpw_new_placeholder": "Introduzca la nueva contraseña",
|
||||||
"tools_download_ca": "Descargar SSL Certificate Authority (CA)",
|
"tools_download_ca": "Descargar certificado SSL de la Autoridad Certificadora (CA)",
|
||||||
"tools_download_ca_desc": "Haga clic aquí para descargar su entidad emisora de certificados SSL (CA)",
|
"tools_download_ca_desc": "Haga clic aquí para descargar el certificado SSL de la Autoridad Certificadora (CA)",
|
||||||
"tools_security_feed": "Notificaciones de seguridad",
|
"tools_security_feed": "Notificaciones de seguridad",
|
||||||
"tools_security_feed_no_items": "No hay ninguna notificación de seguridad",
|
"tools_security_feed_no_items": "No hay ninguna notificación de seguridad",
|
||||||
"tools_security_feed_subscribe_rss": "Suscribirse a nuestro canal RSS de notificaciones de seguridad ",
|
"tools_security_feed_subscribe_rss": "Suscribirse al canal RSS de notificaciones de seguridad",
|
||||||
"tools_security_feed_view_items": "Ver todos los notificaciones de seguridad",
|
"tools_security_feed_view_items": "Ver todas las notificaciones de seguridad",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"transmission": "Transmisión",
|
"transmission": "Transmisión",
|
||||||
"udp": "UDP",
|
"udp": "UDP",
|
||||||
|
@ -200,28 +267,74 @@
|
||||||
"uninstall": "Desinstalar",
|
"uninstall": "Desinstalar",
|
||||||
"unknown_action": "Acción desconocida %s",
|
"unknown_action": "Acción desconocida %s",
|
||||||
"unknown_argument": "Argumento desconocido: %s",
|
"unknown_argument": "Argumento desconocido: %s",
|
||||||
|
"upload": "Subir",
|
||||||
|
"upload_archive": "Subir archivo",
|
||||||
"upnp": "UPnP",
|
"upnp": "UPnP",
|
||||||
"upnp_disabled": "UPnP está desactiva.",
|
"upnp_disabled": "UPnP está desactivado.",
|
||||||
"upnp_enabled": "UPnP está habilitado.",
|
"upnp_enabled": "UPnP está habilitado.",
|
||||||
"uptime": "Iluminado desde",
|
"uptime": "Tiempo de actividad",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"usage": "Uso",
|
"usage": "Uso",
|
||||||
"used": "Usado",
|
"used": "Usado",
|
||||||
"user_email": "Correo electrónico",
|
"user_email": "Correo electrónico",
|
||||||
"user_emailaliases": "Alias de correo electrónico",
|
"user_emailaliases": "Alias de correo electrónico",
|
||||||
"user_emailforward": "Forward de correo electrónico",
|
"user_emailforward": "Reenvío de correo electrónico",
|
||||||
"user_fullname": "Nombre y Apellido",
|
"user_fullname": "Nombre y Apellido",
|
||||||
"user_new_forward": "reenviarnuevo@dominioextranjero.org",
|
"user_interface_link": "Interfaz de usuario",
|
||||||
"user_new_mail": "direccionnuevo@midominio.com",
|
"user_mailbox_quota": "Cuota de correo",
|
||||||
|
"user_new_forward": "nuevoreenviar@dominioexterior.org",
|
||||||
|
"user_new_mail": "direccionnueva@midominio.com",
|
||||||
"user_username": "Nombre de usuario",
|
"user_username": "Nombre de usuario",
|
||||||
"user_username_edit": "Editar la cuenta de %s",
|
"user_username_edit": "Editar la cuenta de %s",
|
||||||
"users": "Usuarios",
|
"users": "Usuarios",
|
||||||
"users_list": "Lista de usuarios",
|
"users_list": "Lista de usuarios",
|
||||||
"users_new": "Nuevo usuario",
|
"users_new": "Nuevo usuario",
|
||||||
"users_no": "No usuarios.",
|
"users_no": "No hay usuarios.",
|
||||||
|
"versions": "Versiones",
|
||||||
"view_user_profile": "Ver perfil de %s",
|
"view_user_profile": "Ver perfil de %s",
|
||||||
"warning_first_user": "Es probable que tenga que <a href='#/users/create' class='alert-link'> primero crear un usuario </a>.",
|
"warning_first_user": "Es probable que tenga que crear primero un usuario <a href='#/users/create' class='alert-link'> </a>.",
|
||||||
"write": "Escribir",
|
"write": "Escribir",
|
||||||
"wrong_password": "Contraseña incorrecta",
|
"wrong_password": "Contraseña incorrecta",
|
||||||
"yes": "Sí"
|
"yes": "Sí",
|
||||||
|
"footer_version": "Con tecnología <a href='https://yunohost.org'>YunoHost</a> %s.",
|
||||||
|
"form_input_example": "Por ejemplo: %s",
|
||||||
|
"certificate_alert_not_valid": "CRÍTICO: ¡El certificado actual no es válido! ¡HTTPS no funcionará!",
|
||||||
|
"certificate_alert_selfsigned": "ADVERTENCIA: Está usando un certificado autofirmado. ¡Los navegadores mostrarán una advertencia a los nuevos visitantes!",
|
||||||
|
"certificate_alert_letsencrypt_about_to_expire": "El certificado actual está a punto de expirar. Pronto debería renovarse automáticamente.",
|
||||||
|
"certificate_alert_about_to_expire": "ADVERTENCIA: ¡El certificado actual está a punto de expirar! ¡NO se renovará automáticamente!",
|
||||||
|
"certificate_alert_good": "¡Ok, el certificado actual parece correcto!",
|
||||||
|
"certificate_alert_great": "¡Excelente! ¡Está usando un certificado \"Let's Encrypt\" válido!",
|
||||||
|
"certificate_alert_unknown": "Estado desconocido",
|
||||||
|
"certificate_manage": "Administrar certificado SSL",
|
||||||
|
"certificate_old_letsencrypt_app_conflict": "La aplicación 'letsencrypt' está instalada y produce un conflicto. Por favor desinstále la aplication para poder usar la nueva interfaz de administración de certificados.",
|
||||||
|
"ssl_certificate": "Certificado SSL",
|
||||||
|
"confirm_cert_install_LE": "¿Está seguro de que desea instalar un certificado Let's Encrypt para este dominio?",
|
||||||
|
"confirm_cert_regen_selfsigned": "¿Está seguro de que desea regenerar un certificado autofirmado para este dominio?",
|
||||||
|
"confirm_cert_manual_renew_LE": "¿Está seguro de que desea renovar manualmente el certificado Let's Encrypt para este dominio?",
|
||||||
|
"confirm_cert_revert_to_selfsigned": "¿Está seguro de que desea revertir este dominio a un certificado autofirmado?",
|
||||||
|
"certificate": "Certificado",
|
||||||
|
"certificate_status": "Estado del certificado",
|
||||||
|
"certificate_authority": "Autoridad de certificación",
|
||||||
|
"validity": "Validez",
|
||||||
|
"domain_is_eligible_for_ACME": "¡Este dominio parece configurado correctamente para instalar un certificado Let's Encrypt!",
|
||||||
|
"domain_not_eligible_for_ACME": "Este dominio no parece configurado para un certificado Let's Encrypt. Compruebe la configuración del DNS y la accesibilidad al servidor HTTP.",
|
||||||
|
"install_letsencrypt_cert": "Instalar un certificado Let's Encrypt",
|
||||||
|
"manually_renew_letsencrypt_message": "El certificado se renovará automáticamente durante los últimos 15 días de su validez. Puede renovarlo manualmente si lo desea. (No recomendado).",
|
||||||
|
"manually_renew_letsencrypt": "Renovar manualmente ahora",
|
||||||
|
"regenerate_selfsigned_cert_message": "Si lo desea, puede regenerar el certificado autofirmado.",
|
||||||
|
"regenerate_selfsigned_cert": "Regenerar certificado autofirmado",
|
||||||
|
"revert_to_selfsigned_cert_message": "Si realmente lo desea, puede reinstalar un certificado autofirmado. (No recomendado)",
|
||||||
|
"revert_to_selfsigned_cert": "Volver a un certificado autofirmado",
|
||||||
|
"user_mailbox_use": "Espacio utilizado",
|
||||||
|
"confirm_firewall_open": "¿Está seguro de que desea abrir el puerto %s? (protocolo: %s, conexión: %s)",
|
||||||
|
"confirm_firewall_close": "¿Está seguro de que desea cerrar el puerto %s? (protocolo: %s, conexión: %s)",
|
||||||
|
"confirm_service_start": "¿Está seguro de que desea iniciar %s?",
|
||||||
|
"confirm_service_stop": "¿Está seguro de que desea parar %s?",
|
||||||
|
"confirm_service_enable": "¿Está seguro de que desea habilitar %s?",
|
||||||
|
"confirm_service_disable": "¿Está seguro de que desea deshabilitar %s?",
|
||||||
|
"confirm_update_apps": "¿Está seguro de que desea actualizar todas las aplicaciones?",
|
||||||
|
"confirm_update_packages": "¿Está seguro de que desea actualizar todos los paquetes?",
|
||||||
|
"confirm_upnp_enable": "¿Está seguro de que desea habilitar UPnP?",
|
||||||
|
"confirm_upnp_disable": "¿Está seguro de que desea deshabilitar UPnP?",
|
||||||
|
"ok": "OK"
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,24 +55,24 @@
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"check": "Vérification",
|
"check": "Vérification",
|
||||||
"check_mx": "Enregistrement MX",
|
"check_mx": "Enregistrement MX",
|
||||||
"check_stmp": "Accès au port 25",
|
"check_stmp": "Accessibilité du port 25",
|
||||||
"close": "Fermer",
|
"close": "Fermer",
|
||||||
"confirm_access_add": "Êtes-vous sur de vouloir ajouter un accès à %s pour tous les utilisateurs ?",
|
"confirm_access_add": "Voulez-vous vraiment ajouter l'accès à %s pour tous les utilisateurs ?",
|
||||||
"confirm_access_clear": "Êtes-vous sur de vouloir supprimer toutes les règles d'accès à %s ?",
|
"confirm_access_clear": "Voulez-vous vraiment supprimer tous les accès à %s ?",
|
||||||
"confirm_access_remove_all": "Êtes-vous sur de vouloir supprimer tous les accès à %s ?",
|
"confirm_access_remove_all": "Voulez-vous vraiment supprimer tous les accès à %s ?",
|
||||||
"confirm_access_remove_user": "Êtes-vous sur de vouloir supprimer les accès à %s pour %s ?",
|
"confirm_access_remove_user": "Voulez-vous vraiment supprimer les accès à %s pour %s ?",
|
||||||
"confirm_app_default": "Êtes-vous sur de vouloir définir cette application par défaut ?",
|
"confirm_app_default": "Voulez-vous vraiment définir cette application par défaut ?",
|
||||||
"confirm_change_maindomain": "Êtes-vous sur de vouloir changer le domaine principal ?",
|
"confirm_change_maindomain": "Voulez-vous vraiment changer le domaine principal ?",
|
||||||
"confirm_delete": "Êtes-vous sur de vouloir supprimer %s ?",
|
"confirm_delete": "Voulez-vous vraiment supprimer %s ?",
|
||||||
"confirm_firewall": "Êtes-vous sur de vouloir %s le port %s (protocole: %s, connexion: %s)",
|
"confirm_firewall": "Voulez-vous vraiment %s le port %s (protocole: %s, connexion: %s)",
|
||||||
"confirm_install_custom_app": "L'installation d'applications tierces peut compromettre la sécurité du système. À utiliser à vos propres risques.",
|
"confirm_install_custom_app": "L'installation d'applications tierces peut compromettre la sécurité du système. À utiliser à vos propres risques.",
|
||||||
"confirm_install_domain_root": "Vous ne pourrez pas installer d'autres applications sur %s. Continuer ?",
|
"confirm_install_domain_root": "Vous ne pourrez pas installer d'autres applications sur %s. Continuer ?",
|
||||||
"confirm_postinstall": "Vous êtes sur le point de lancer le processus de post-installation sur le domaine %s. Cela peut prendre du temps, *n'interrompez pas l'opération avant la fin*.",
|
"confirm_postinstall": "Vous êtes sur le point de lancer le processus de post-installation sur le domaine %s. Cela peut prendre du temps, *n'interrompez pas l'opération avant la fin*.",
|
||||||
"confirm_restore": "Êtes-vous sur de vouloir restaurer %s ?",
|
"confirm_restore": "Voulez-vous vraiment restaurer %s ?",
|
||||||
"confirm_service_action": "Êtes-vous sur de vouloir %s %s ?",
|
"confirm_service_action": "Voulez-vous vraiment %s %s ?",
|
||||||
"confirm_uninstall": "Êtes-vous sur de vouloir désinstaller %s ?",
|
"confirm_uninstall": "Voulez-vous vraiment désinstaller %s ?",
|
||||||
"confirm_update_type": "Êtes-vous sur de vouloir mettre à jour tous les %s ?",
|
"confirm_update_type": "Voulez-vous vraiment mettre à jour toutes les %s ?",
|
||||||
"confirm_upnp_action": "Êtes-vous sur de vouloir %s l'UPnP ?",
|
"confirm_upnp_action": "Voulez-vous vraiment %s l'UPnP ?",
|
||||||
"connection": "Connexion",
|
"connection": "Connexion",
|
||||||
"copy": "Copier",
|
"copy": "Copier",
|
||||||
"count_min": "%s min",
|
"count_min": "%s min",
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"diagnosis": "Diagnostic",
|
"diagnosis": "Diagnostic",
|
||||||
"diagnosis_hide_private": "Afficher le diagnostic sans les données sensibles",
|
"diagnosis_hide_private": "Afficher le diagnostic sans les données sensibles",
|
||||||
"diagnosis_view_private": "Afficher le diagnostic avec les données sensibles",
|
"diagnosis_view_private": "Afficher le diagnostic en incluant les données sensibles",
|
||||||
"diagnosis_with_private": "Diagnostic avec les données sensibles",
|
"diagnosis_with_private": "Diagnostic avec les données sensibles",
|
||||||
"disable": "Désactiver",
|
"disable": "Désactiver",
|
||||||
"disabled": "Désactivé",
|
"disabled": "Désactivé",
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
"dns": "DNS",
|
"dns": "DNS",
|
||||||
"domain": "Domaine",
|
"domain": "Domaine",
|
||||||
"domain_add": "Ajouter un domaine",
|
"domain_add": "Ajouter un domaine",
|
||||||
"domain_add_dns_doc": "… et j'ai <a href='//yunohost.org/dns'>configué mes DNS correctement</a>.",
|
"domain_add_dns_doc": "… et j'ai <a href='//yunohost.org/dns'>configuré mes DNS correctement</a>.",
|
||||||
"domain_add_dyndns_doc": "… et je souhaite un nom de domaine préconfiguré.",
|
"domain_add_dyndns_doc": "… et je souhaite un nom de domaine préconfiguré.",
|
||||||
"domain_add_panel_with_domain": "J'ai déjà un nom de domaine …",
|
"domain_add_panel_with_domain": "J'ai déjà un nom de domaine …",
|
||||||
"domain_add_panel_without_domain": "Je n'ai pas de nom de domaine …",
|
"domain_add_panel_without_domain": "Je n'ai pas de nom de domaine …",
|
||||||
|
@ -138,12 +138,12 @@
|
||||||
"hook_conf_ynh_mysql": "Mot de passe MySQL",
|
"hook_conf_ynh_mysql": "Mot de passe MySQL",
|
||||||
"hook_data_home": "Données utilisateurs",
|
"hook_data_home": "Données utilisateurs",
|
||||||
"hook_data_home_desc": "Les données des utilisateurs situées dans /home/USER",
|
"hook_data_home_desc": "Les données des utilisateurs situées dans /home/USER",
|
||||||
"hook_data_mail": "Mail",
|
"hook_data_mail": "Courriel",
|
||||||
"hook_data_mail_desc": "Les mails qui sont encore sur le serveur",
|
"hook_data_mail_desc": "Les courriels qui sont encore sur le serveur",
|
||||||
"hostname": "Nom d'hôte",
|
"hostname": "Nom d'hôte",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"inactive": "Inactif",
|
"inactive": "Inactif",
|
||||||
"infos": "Infos",
|
"infos": "Info",
|
||||||
"install": "Installer",
|
"install": "Installer",
|
||||||
"install_name": "Installer %s",
|
"install_name": "Installer %s",
|
||||||
"install_time": "Date d'installation",
|
"install_time": "Date d'installation",
|
||||||
|
@ -208,10 +208,10 @@
|
||||||
"postinstall_intro_3": "Vous pouvez obtenir plus d'informations en vous rendant sur <a href='//yunohost.org/postinstall_fr' target='_blank'>la page de documentation appropriée</a>",
|
"postinstall_intro_3": "Vous pouvez obtenir plus d'informations en vous rendant sur <a href='//yunohost.org/postinstall_fr' target='_blank'>la page de documentation appropriée</a>",
|
||||||
"postinstall_password": "C'est le mot de passe qui vous permettra d'accéder à l'interface d'administration et de contrôler votre serveur. Prenez le temps d'en choisir un bon.",
|
"postinstall_password": "C'est le mot de passe qui vous permettra d'accéder à l'interface d'administration et de contrôler votre serveur. Prenez le temps d'en choisir un bon.",
|
||||||
"previous": "Précédent",
|
"previous": "Précédent",
|
||||||
"process": "Process",
|
"process": "Processus",
|
||||||
"protocol": "Protocole",
|
"protocol": "Protocole",
|
||||||
"public_ip": "IP publique : ",
|
"public_ip": "IP publique : ",
|
||||||
"ram": "RAM",
|
"ram": "Mémoire vive",
|
||||||
"read": "Lecture",
|
"read": "Lecture",
|
||||||
"read_more": "En savoir plus",
|
"read_more": "En savoir plus",
|
||||||
"reception": "Réception",
|
"reception": "Réception",
|
||||||
|
@ -234,14 +234,14 @@
|
||||||
"storage_create": "Ajouter un stockage distant",
|
"storage_create": "Ajouter un stockage distant",
|
||||||
"storages_new": "Nouveau stockage distant",
|
"storages_new": "Nouveau stockage distant",
|
||||||
"storages_no": "Aucun stockage.",
|
"storages_no": "Aucun stockage.",
|
||||||
"swap": "Swap",
|
"swap": "Espace d’échange",
|
||||||
"system": "Système",
|
"system": "Système",
|
||||||
"system_apps": "Applications",
|
"system_apps": "Applications",
|
||||||
"system_apps_nothing": "Il n'y a aucune application à mettre à jour.",
|
"system_apps_nothing": "Il n'y a aucune application à mettre à jour.",
|
||||||
"system_delayed_upgrade": "Mise à jour différée",
|
"system_delayed_upgrade": "Mise à jour différée",
|
||||||
"system_delayed_upgrade_warning": "<b>%s</b> sera mis-à-jour automatiquement durant l'heure suivante.",
|
"system_delayed_upgrade_warning": "<b>%s</b> sera mis-à-jour automatiquement durant l'heure suivante.",
|
||||||
"system_packages": "Paquets",
|
"system_packages": "Paquets",
|
||||||
"system_packages_nothing": "Il n'y a aucun paquet à mettre à jour.",
|
"system_packages_nothing": "Aucun paquet n'est à mettre à jour.",
|
||||||
"system_update": "Mettre à jour le système",
|
"system_update": "Mettre à jour le système",
|
||||||
"system_upgrade": "Mise à jour du système",
|
"system_upgrade": "Mise à jour du système",
|
||||||
"system_upgrade_btn": "Mettre à jour",
|
"system_upgrade_btn": "Mettre à jour",
|
||||||
|
@ -266,7 +266,7 @@
|
||||||
"uninstall": "Désinstaller",
|
"uninstall": "Désinstaller",
|
||||||
"unknown_action": "Action %s inconnue",
|
"unknown_action": "Action %s inconnue",
|
||||||
"unknown_argument": "Argument inconnu : %s",
|
"unknown_argument": "Argument inconnu : %s",
|
||||||
"upload": "Uploader",
|
"upload": "Partager avec yunopaste",
|
||||||
"upload_archive": "Uploader une sauvegarde",
|
"upload_archive": "Uploader une sauvegarde",
|
||||||
"upnp": "UPnP",
|
"upnp": "UPnP",
|
||||||
"upnp_disabled": "L’UPnP est désactivé.",
|
"upnp_disabled": "L’UPnP est désactivé.",
|
||||||
|
@ -274,8 +274,8 @@
|
||||||
"uptime": "Durée de fonctionnement",
|
"uptime": "Durée de fonctionnement",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"usage": "Utilisation",
|
"usage": "Utilisation",
|
||||||
"used": "Utilisé(e)",
|
"used": "Utilisé",
|
||||||
"user_email": "Email",
|
"user_email": "Courriel",
|
||||||
"user_emailaliases": "Adresses supplémentaires",
|
"user_emailaliases": "Adresses supplémentaires",
|
||||||
"user_emailforward": "Adresses de transfert",
|
"user_emailforward": "Adresses de transfert",
|
||||||
"user_fullname": "Nom complet",
|
"user_fullname": "Nom complet",
|
||||||
|
@ -294,5 +294,95 @@
|
||||||
"warning_first_user": "Vous devez probablement d'abord <a href='#/users/create' class='alert-link'>créer un utilisateur</a>.",
|
"warning_first_user": "Vous devez probablement d'abord <a href='#/users/create' class='alert-link'>créer un utilisateur</a>.",
|
||||||
"write": "Écriture",
|
"write": "Écriture",
|
||||||
"wrong_password": "Mot de passe incorrect",
|
"wrong_password": "Mot de passe incorrect",
|
||||||
"yes": "Oui"
|
"yes": "Oui",
|
||||||
|
"form_input_example": "Exemple : %s",
|
||||||
|
"footer_version": "Propulsé par <a href='https://yunohost.org'>YunoHost</a> %s (%s).",
|
||||||
|
"certificate_alert_not_valid": "Critique : le certificat actuel est invalide ! Le HTTPS ne fonctionnera pas du tout !",
|
||||||
|
"certificate_alert_selfsigned": "Attention : le certification actuel est auto-signé. Les navigateurs afficheront une alerte effrayante aux nouveaux visiteurs !",
|
||||||
|
"certificate_alert_letsencrypt_about_to_expire": "Le certificat actuel est sur le point d’expirer. Il doit être renouvelé automatiquement prochainement.",
|
||||||
|
"certificate_alert_about_to_expire": "Attention : le certificat actuel est sur le point d’expirer ! Il ne sera pas renouvelé automatiquement !",
|
||||||
|
"certificate_alert_good": "Bien, le certificat actuel a l’air correct !",
|
||||||
|
"certificate_alert_great": "Parfait ! Vous utilisez un certificat Let’s Encrypt valide !",
|
||||||
|
"certificate_alert_unknown": "Statut inconnu",
|
||||||
|
"certificate_manage": "Gérer les certificats SSL",
|
||||||
|
"certificate_old_letsencrypt_app_conflict": "L’application « letsencrypt » est actuellement installée et est en conflit avec cette fonctionnalité. Veuillez la désinstaller pour utiliser la nouvelle interface de gestion des certificats.",
|
||||||
|
"ssl_certificate": "Certificat SSL",
|
||||||
|
"confirm_cert_install_LE": "Voulez-vous vraiment installer un certificat Let’s Encrypt pour ce domaine ?",
|
||||||
|
"confirm_cert_regen_selfsigned": "Voulez-vous vraiment régénérer un certificat auto-signé pour ce domaine ?",
|
||||||
|
"confirm_cert_manual_renew_LE": "Voulez-vous vraiment renouveler manuellement le certificat Let’s Encrypt pour ce domaine ?",
|
||||||
|
"confirm_cert_revert_to_selfsigned": "Voulez-vous vraiment remettre un certificat auto-signé à ce domaine ?",
|
||||||
|
"certificate": "Certificat",
|
||||||
|
"certificate_status": "Statut du certificat",
|
||||||
|
"certificate_authority": "Autorité de certification",
|
||||||
|
"validity": "Validité",
|
||||||
|
"domain_is_eligible_for_ACME": "Ce domaine semble correctement configuré pour installer un certificat Let’s Encrypt !",
|
||||||
|
"domain_not_eligible_for_ACME": "Ce domaine ne semble pas prêt pour un certificat Let’s Encrypt. Veuillez vérifier votre configuration DNS et l’accessibilité de votre serveur HTTP.",
|
||||||
|
"install_letsencrypt_cert": "Installer un certificat Let’s Encrypt",
|
||||||
|
"manually_renew_letsencrypt_message": "Le certificat sera renouvelé automatiquement lors des 15 derniers jours de validité. Vous pouvez manuellement le renouveler si vous le souhaitez (non recommandé).",
|
||||||
|
"manually_renew_letsencrypt": "Renouveler manuellement maintenant",
|
||||||
|
"regenerate_selfsigned_cert_message": "Si vous le souhaitez, vous pouvez régénérer les certificats auto-signés.",
|
||||||
|
"regenerate_selfsigned_cert": "Régénérer les certificats auto-signés",
|
||||||
|
"revert_to_selfsigned_cert_message": "Si vous le souhaitez vraiment, vous pouvez réinstaller un certificat auto-signé (non recommandé).",
|
||||||
|
"revert_to_selfsigned_cert": "Retourner à un certificat auto-signé",
|
||||||
|
"user_mailbox_use": "Espace utilisé de la boite aux lettres",
|
||||||
|
"confirm_firewall_open": "Voulez-vous vraiment ouvrir le port %s ? (protocole : %s, connexion : %s)",
|
||||||
|
"confirm_firewall_close": "Voulez-vous vraiment fermer le port %s ? (protocole : %s, connexion : %s)",
|
||||||
|
"confirm_service_start": "Voulez-vous vraiment démarrer %s ?",
|
||||||
|
"confirm_service_stop": "Voulez-vous vraiment arrêter %s ?",
|
||||||
|
"confirm_service_enable": "Voulez-vous vraiment activer %s ?",
|
||||||
|
"confirm_service_disable": "Voulez-vous vraiment désactiver %s ?",
|
||||||
|
"confirm_update_apps": "Voulez-vous vraiment mettre à jour toutes les applications ?",
|
||||||
|
"confirm_update_packages": "Voulez-vous vraiment mettre à jour tous les paquets ?",
|
||||||
|
"confirm_upnp_enable": "Voulez-vous vraiment activer l'UPnP ?",
|
||||||
|
"confirm_upnp_disable": "Voulez-vous vraiment désactiver l'UPnP ?",
|
||||||
|
"remove": "Supprimer",
|
||||||
|
"appslists": "Listes d’applications",
|
||||||
|
"appslists_no_lists": "Aucune liste d’applications",
|
||||||
|
"appslists_custom": "Liste personnalisée d’applications",
|
||||||
|
"appslists_manage": "Gérer les listes d’applications",
|
||||||
|
"appslists_confirm_remove": "Voulez-vous vraiment supprimer cette liste d’applications ?",
|
||||||
|
"appslists_info_refresh_desc": "Actualiser le statut des applications de cette liste.",
|
||||||
|
"appslists_info_remove_desc": "Les applications de cette liste ne seront plus disponibles.",
|
||||||
|
"appslists_last_update": "Dernière mise à jour",
|
||||||
|
"appslists_unknown_list": "La liste « %s » est inconnue",
|
||||||
|
"appslists_community_list": "Liste des applications communautaires",
|
||||||
|
"name": "Nom",
|
||||||
|
"install_community_appslists_info": "La liste des applications communautaires vous permet d’installer les applications maintenues par la communauté. <br />Parcourez la liste complète sur <a href='https://yunohost.org/apps_in_progress'>yunohost.org/apps_in_progress_fr</a>.",
|
||||||
|
"install_community_appslists_warning": "Ces applications <strong>ne sont ni</strong> officielles, ni maintenues par l’équipe YunoHost. <br />Installer ces applications est à vos risques et périls, et peut casser votre système.",
|
||||||
|
"install_custom_app_appslists_info": "Vous pouvez utiliser des listes alternatives d’applications pour installer d’autres applications maintenues par la communauté YunoHost.",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "Cette page montre la configuration *recommandée*. Elle ne configure *pas* le DNS pour vous. Il est de votre responsabilité que de configurer votre zone DNS chez votre registrar DNS avec cette recommandation.",
|
||||||
|
"internal_exception": "<strong>YunoHost a rencontré une erreur interne :/</strong><br><em>Vraiment navré.<br>Vous devriez chercher de l’aide sur <a href=\"https://forum.yunohost.org/\">le forum</a> ou <a href=\"https://chat.yunohost.org/\">le salon</a> pour résoudre le problème, ou rapporter le bogue sur <a href=\"https://github.com/YunoHost/issues\">l’outil de suivi</a>.</em><br>Les informations suivantes peuvent être utile à l’interlocuteur vous aidant :<h3>Action</h3><pre>%s %s</pre><h3>Trace</h3><pre>%s</pre>",
|
||||||
|
"confirm_reboot_action_reboot": "Êtes vous sûr de vouloir redémarrer votre serveur ?",
|
||||||
|
"confirm_reboot_action_shutdown": "Êtes vous sûr de vouloir éteindre votre serveur ?",
|
||||||
|
"confirm_update_specific_app": "Êtes vous sûr de vouloir mettre à jour %s ?",
|
||||||
|
"ok": "OK",
|
||||||
|
"system_upgrade_all_applications_btn": "Mettre à jour toutes les applications",
|
||||||
|
"system_upgrade_all_packages_btn": "Mettre à jour tous les paquets",
|
||||||
|
"tools_reboot": "Redémarrer votre serveur",
|
||||||
|
"tools_reboot_btn": "Redémarrer",
|
||||||
|
"tools_reboot_done": "Redémarrage...",
|
||||||
|
"tools_rebooting": "Votre serveur redémarre. Pour retourner sur l’interface d'administration vous devez attendre que votre serveur soit démarré. Vous pouvez le vérifier en actualisant cette page (F5).",
|
||||||
|
"tools_shutdown": "Eteindre votre serveur",
|
||||||
|
"tools_shutdown_btn": "Eteindre",
|
||||||
|
"tools_shutdown_done": "Arrêt en cours...",
|
||||||
|
"tools_shuttingdown": "Votre serveur est éteint. Tant que votre serveur est éteint vous ne pouvez plus utiliser l'interface d'administration.",
|
||||||
|
"tools_shutdown_reboot": "Arrêter/Redémarrer",
|
||||||
|
"app_change_label": "Changer le libellé",
|
||||||
|
"app_change_url": "Changer l’URL",
|
||||||
|
"app_info_changelabel_desc": "Change le libellé de l’application dans le portail.",
|
||||||
|
"app_info_changeurl_desc": "Change l’adresse d’accès de cette application (domaine et/ou chemin).",
|
||||||
|
"app_info_change_url_disabled_tooltip": "Cette fonctionnalité n’a pas encore été implémentée pour cette application",
|
||||||
|
"confirm_app_change_url": "Voulez-vous vraiment changer l’adresse d’accès de cette application ?",
|
||||||
|
"path_url": "Chemin",
|
||||||
|
"meltdown": "Vous êtes vulnérable à la faille de sécurité critique <a target=\"_blank\" href=\"https://meltdownattack.com/\">meltdown</a>. Pour résoudre le problème, vous devez <a href=\"#/update\">mettre à jour votre système</a> puis <a href=\"#/tools/reboot\">le redémarrer</a> pour charger le nouveau noyau linux.",
|
||||||
|
"confirm_migrations_skip": "Sauter les migrations n’est pas recommandé. Voulez-vous vraiment le faire ?",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations_pending": "Migrations en attente",
|
||||||
|
"migrations_done": "Migrations précédentes",
|
||||||
|
"migrations_no_pending": "Aucune migration en attente",
|
||||||
|
"migrations_no_done": "Aucune migration précédente",
|
||||||
|
"run": "Lancer",
|
||||||
|
"skip": "Sauter",
|
||||||
|
"service_description": "Description :",
|
||||||
|
"started_at": "Démarré à :"
|
||||||
}
|
}
|
||||||
|
|
8
src/locales/hi.json
Normal file
8
src/locales/hi.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"logged_in": "लोग्ड इन",
|
||||||
|
"logged_out": "लॉग आउट",
|
||||||
|
"password": "पासवर्ड",
|
||||||
|
"action": "कार्रवाई",
|
||||||
|
"add": "जोड़े।",
|
||||||
|
"administration_password": "एडमिनिस्ट्रेटर का पासवर्ड।"
|
||||||
|
}
|
|
@ -5,21 +5,25 @@
|
||||||
"allowed_users": "Utenti consentiti",
|
"allowed_users": "Utenti consentiti",
|
||||||
"api_not_responding": "Le API non rispondono",
|
"api_not_responding": "Le API non rispondono",
|
||||||
"app_access": "Accesso",
|
"app_access": "Accesso",
|
||||||
"app_access_addall_btn": "Aggiungi accesso per tutti",
|
"app_access_addall_btn": "Attiva l'accesso per tutti",
|
||||||
"app_access_addall_desc": "Tutti gli utenti esistenti avranno accesso a %s.",
|
"app_access_addall_desc": "Tutti gli utenti esistenti avranno accesso a %s.",
|
||||||
"app_access_clearall_btn": "Cancella tutti gli accessi",
|
"app_access_clearall_btn": "Cancella tutti gli accessi",
|
||||||
"app_access_clearall_desc": "Tutti gli utenti avranno accesso a %s.",
|
"app_access_clearall_desc": "Tutti gli utenti avranno accesso a %s.",
|
||||||
"app_access_removeall_btn": "Rimuovi tutti gli accessi",
|
"app_access_removeall_btn": "Rimuovi tutti gli accessi",
|
||||||
"app_access_removeall_desc": "Nessun utente avrà accesso a %s.",
|
"app_access_removeall_desc": "Nessun utente avrà accesso a %s.",
|
||||||
"app_access_title": "accesso %s",
|
"app_access_title": "accesso %s",
|
||||||
"app_debug_no_logs": "Logs non disponibili",
|
"app_debug_no_logs": "Logs dell'applicazione non disponibili",
|
||||||
|
"app_debug_tab": "Visualizzare informazioni di debug",
|
||||||
"app_info_access_desc": "Gestisci accesso utente. Utenti consentiti: %s",
|
"app_info_access_desc": "Gestisci accesso utente. Utenti consentiti: %s",
|
||||||
|
"app_info_debug_desc": "Visualizzare informazioni di debug per quest'applicazione.",
|
||||||
"app_info_default_desc": "Redirigi root dominio su questa applicazione (%s).",
|
"app_info_default_desc": "Redirigi root dominio su questa applicazione (%s).",
|
||||||
"app_info_uninstall_desc": "Rimuovi questa applicazione.",
|
"app_info_uninstall_desc": "Rimuovi questa applicazione.",
|
||||||
"app_install_cancel": "Installazione cancellata.",
|
"app_install_cancel": "Installazione cancellata.",
|
||||||
"app_install_custom_no_manifest": "Nessun file manifest.json",
|
"app_install_custom_no_manifest": "Nessun file manifest.json",
|
||||||
"app_list": "Lista app",
|
"app_list": "Lista app",
|
||||||
"app_make_default": "Imposta predefinito",
|
"app_make_default": "Imposta predefinito",
|
||||||
|
"app_repository": "Origine dell'applicazione : ",
|
||||||
|
"app_state_validated": "Convalidato",
|
||||||
"application": "Applicazione",
|
"application": "Applicazione",
|
||||||
"applications": "Applicazion",
|
"applications": "Applicazion",
|
||||||
"archive_empty": "Archivio vuoto",
|
"archive_empty": "Archivio vuoto",
|
||||||
|
@ -31,6 +35,7 @@
|
||||||
"backup_archive_download": "Scarica questo archivio",
|
"backup_archive_download": "Scarica questo archivio",
|
||||||
"backup_content": "Contenuto del backup",
|
"backup_content": "Contenuto del backup",
|
||||||
"backup_create": "Creare un backup",
|
"backup_create": "Creare un backup",
|
||||||
|
"backup_encryption_warning": "Non dimenticare il password, ne avrai bisogno se vuoi ripristinare l'archivio",
|
||||||
"backup_new": "Nuovo backup",
|
"backup_new": "Nuovo backup",
|
||||||
"backup_optional_password": "Password facoltativo",
|
"backup_optional_password": "Password facoltativo",
|
||||||
"backup_type": "Tipo",
|
"backup_type": "Tipo",
|
||||||
|
@ -66,10 +71,12 @@
|
||||||
"disk": "Disco",
|
"disk": "Disco",
|
||||||
"domain": "Dominio",
|
"domain": "Dominio",
|
||||||
"domain_add": "Aggiungi dominio",
|
"domain_add": "Aggiungi dominio",
|
||||||
|
"domain_add_dns_doc": "… e ho <a href='//yunohost.org/dns'>correttamente definito il DNS</a>.",
|
||||||
"domain_add_dyndns_doc": "... e voglio un servizio DNS dinamico.",
|
"domain_add_dyndns_doc": "... e voglio un servizio DNS dinamico.",
|
||||||
"domain_add_panel_with_domain": "Ho già un nome a domino...",
|
"domain_add_panel_with_domain": "Ho già un nome a domino...",
|
||||||
"domain_add_panel_without_domain": "Non ho un nome a domino...",
|
"domain_add_panel_without_domain": "Non ho un nome a domino...",
|
||||||
"domain_default": "Dominio predefinito",
|
"domain_default": "Dominio predefinito",
|
||||||
|
"domain_dns_config": "Configurazione del DNS",
|
||||||
"domain_list": "Lista domini",
|
"domain_list": "Lista domini",
|
||||||
"domain_name": "Nome a domino",
|
"domain_name": "Nome a domino",
|
||||||
"domain_select": "Scegli dominio",
|
"domain_select": "Scegli dominio",
|
||||||
|
@ -77,7 +84,7 @@
|
||||||
"download": "Scaricamento",
|
"download": "Scaricamento",
|
||||||
"enable": "Abilita",
|
"enable": "Abilita",
|
||||||
"error_modify_something": "Dovresti modificare qualcosa",
|
"error_modify_something": "Dovresti modificare qualcosa",
|
||||||
"error_occured": "Si è verificato un errore, riprovare più tardi",
|
"error_occured": "Si è verificata un errore, riprova di nuovo",
|
||||||
"error_retrieve_feed": "Non è possibile ricevere il feed : %s",
|
"error_retrieve_feed": "Non è possibile ricevere il feed : %s",
|
||||||
"error_select_domain": "Dovresti indicare un dominio",
|
"error_select_domain": "Dovresti indicare un dominio",
|
||||||
"error_server": "Errore del server",
|
"error_server": "Errore del server",
|
||||||
|
@ -97,7 +104,7 @@
|
||||||
"hook_conf_ynh_firewall": "Firewall",
|
"hook_conf_ynh_firewall": "Firewall",
|
||||||
"hook_data_home": "Dati utente",
|
"hook_data_home": "Dati utente",
|
||||||
"hook_data_mail": "Mail",
|
"hook_data_mail": "Mail",
|
||||||
"hook_data_mail_desc": "Mail che sono sul server",
|
"hook_data_mail_desc": "Mail presente sul server",
|
||||||
"hostname": "Nome host",
|
"hostname": "Nome host",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"inactive": "Inattivo",
|
"inactive": "Inattivo",
|
||||||
|
@ -105,7 +112,7 @@
|
||||||
"install": "Installa",
|
"install": "Installa",
|
||||||
"install_name": "Installa %s",
|
"install_name": "Installa %s",
|
||||||
"install_time": "Tempo installazione",
|
"install_time": "Tempo installazione",
|
||||||
"installation_complete": "Installazione completata",
|
"installation_complete": "Installazione finita",
|
||||||
"installed": "Installato",
|
"installed": "Installato",
|
||||||
"installed_apps": "App installate",
|
"installed_apps": "App installate",
|
||||||
"installing": "Installazione",
|
"installing": "Installazione",
|
||||||
|
@ -122,6 +129,7 @@
|
||||||
"logged_out": "Disconnesso",
|
"logged_out": "Disconnesso",
|
||||||
"login": "Accesso",
|
"login": "Accesso",
|
||||||
"logout": "Esci",
|
"logout": "Esci",
|
||||||
|
"mailbox_quota_description": "Per esempio, 700M è un CD, 4700M è un DVD.",
|
||||||
"manage_apps": "Gestisci app",
|
"manage_apps": "Gestisci app",
|
||||||
"manage_domains": "Gestisci domini",
|
"manage_domains": "Gestisci domini",
|
||||||
"manage_users": "Gestisci utenti",
|
"manage_users": "Gestisci utenti",
|
||||||
|
@ -175,20 +183,23 @@
|
||||||
"service_start_on_boot": "Inizia al boot: ",
|
"service_start_on_boot": "Inizia al boot: ",
|
||||||
"service_status": "Stato:",
|
"service_status": "Stato:",
|
||||||
"services": "Servizi",
|
"services": "Servizi",
|
||||||
"services_list": "Lista servizi",
|
"services_list": "Lista dei servizi",
|
||||||
"set_default": "Imposta predefinito",
|
"set_default": "Imposta predefinito",
|
||||||
"size": "Dimensione",
|
"size": "Dimensione",
|
||||||
"start": "Avvia",
|
"start": "Avvia",
|
||||||
"status": "Stato",
|
"status": "Stato",
|
||||||
"stop": "Arresta",
|
"stop": "Arresta",
|
||||||
|
"storages_new": "Nuovo storage remoto",
|
||||||
"swap": "Swap",
|
"swap": "Swap",
|
||||||
"system": "Sistema",
|
"system": "Sistema",
|
||||||
"system_apps": "App",
|
"system_apps": "App",
|
||||||
"system_apps_nothing": "Non ci sono applicazioni da aggiornare.",
|
"system_apps_nothing": "Non ci sono applicazioni da aggiornare.",
|
||||||
|
"system_delayed_upgrade": "Aggiornamento ritardato",
|
||||||
"system_delayed_upgrade_warning": "<b>%s</b> verrà aggiornato automaticamente entro la prossima ora.",
|
"system_delayed_upgrade_warning": "<b>%s</b> verrà aggiornato automaticamente entro la prossima ora.",
|
||||||
"system_packages": "Pacchetti",
|
"system_packages": "Pacchetti",
|
||||||
"system_packages_nothing": "Non ci sono pachetti da aggiornare.",
|
"system_packages_nothing": "Nessun pachetti da aggiornare.",
|
||||||
"system_upgrade": "Aggiornamento del sistema",
|
"system_upgrade": "Aggiornamento del sistema",
|
||||||
|
"system_upgrade_btn": "Aggiornamento",
|
||||||
"tcp": "TCP",
|
"tcp": "TCP",
|
||||||
"time_since_update": "Time since update:",
|
"time_since_update": "Time since update:",
|
||||||
"tools": "Strumenti",
|
"tools": "Strumenti",
|
||||||
|
@ -208,6 +219,7 @@
|
||||||
"uninstall": "Disinstalla",
|
"uninstall": "Disinstalla",
|
||||||
"unknown_action": "Azione sconosciuta %s",
|
"unknown_action": "Azione sconosciuta %s",
|
||||||
"unknown_argument": "Argomenti sconosciuti : %s",
|
"unknown_argument": "Argomenti sconosciuti : %s",
|
||||||
|
"upload": "Caricamento",
|
||||||
"upnp": "UPnP",
|
"upnp": "UPnP",
|
||||||
"upnp_disabled": "UPnP è disabilitato.",
|
"upnp_disabled": "UPnP è disabilitato.",
|
||||||
"upnp_enabled": "UPnP è abilitato.",
|
"upnp_enabled": "UPnP è abilitato.",
|
||||||
|
@ -220,6 +232,7 @@
|
||||||
"user_emailforward": "Inoltro email",
|
"user_emailforward": "Inoltro email",
|
||||||
"user_fullname": "Nome completo",
|
"user_fullname": "Nome completo",
|
||||||
"user_interface_link": "Interfaccia utente",
|
"user_interface_link": "Interfaccia utente",
|
||||||
|
"user_mailbox_quota": "Quota di mailbox",
|
||||||
"user_new_forward": "nuovoinoltro@miodominiodifferente.org",
|
"user_new_forward": "nuovoinoltro@miodominiodifferente.org",
|
||||||
"user_new_mail": "nuovaemail@miodominio.org",
|
"user_new_mail": "nuovaemail@miodominio.org",
|
||||||
"user_username": "Nome utente",
|
"user_username": "Nome utente",
|
||||||
|
@ -232,5 +245,58 @@
|
||||||
"warning_first_user": "Probabilmente dovresti <a href='#/users/create' class='alert-link'>creare un utente</a> prima.",
|
"warning_first_user": "Probabilmente dovresti <a href='#/users/create' class='alert-link'>creare un utente</a> prima.",
|
||||||
"write": "Write",
|
"write": "Write",
|
||||||
"wrong_password": "Password sbagliata",
|
"wrong_password": "Password sbagliata",
|
||||||
"yes": "Si"
|
"yes": "Si",
|
||||||
|
"app_state": "Stato dell'applicazione: ",
|
||||||
|
"app_state_inprogress": "In corso",
|
||||||
|
"confirm_install_custom_app": "L'installazione di applicazioni 3rd party può compromettere la sicurezza del sistema. Utilizzare a proprio rischio.",
|
||||||
|
"backup_archive_copy": "Copia questo archivio su un altro storage",
|
||||||
|
"confirm_install_domain_root": "Non sarà in grado di installare qualsiasi altra applicazione su %s. Continuare ?",
|
||||||
|
"app_state_notworking": "Non funzionando",
|
||||||
|
"app_state_working": "Funzionando",
|
||||||
|
"backup_experimental_warning": "Nota: la funzione backup è ancora sperimentale e potrebbe non essere completamente affidabile.",
|
||||||
|
"backup_optional_encryption": "Cifratura opzionale",
|
||||||
|
"begin": "Comincia",
|
||||||
|
"check": "Verifica",
|
||||||
|
"confirm_firewall": "Sei sicuro di %s la porta %s (protocollo: %s, connessione: %s)",
|
||||||
|
"confirm_postinstall": "Sei a lanciare il processo di post-installazione sul dominio %s. Potrebbe richiedere alcuni minuti, *non interrompere l'operazione*.",
|
||||||
|
"confirm_restore": "Sei sicuro di volere ripristinare %s ?",
|
||||||
|
"copy": "Copia",
|
||||||
|
"count_min": "%s min",
|
||||||
|
"diagnosis": "Diagnosi",
|
||||||
|
"diagnosis_hide_private": "Mostra l'informazione della diagnosi senza dati privati",
|
||||||
|
"diagnosis_view_private": "Mostra l'informazione della diagnosi con i dati privati inclusi",
|
||||||
|
"diagnosis_with_private": "Diagnosi con dati privati",
|
||||||
|
"dns": "DNS",
|
||||||
|
"domain_default_desc": "Il dominio predefinito è il dominio di collegamento dove gli utenti fanno il login.",
|
||||||
|
"domain_default_longdesc": "Questo è il dominio predefinito.",
|
||||||
|
"domain_delete_longdesc": "Cancella questo dominio",
|
||||||
|
"domain_dns_longdesc": "Vedi la configurazione DNS",
|
||||||
|
"domain_visit": "Visita",
|
||||||
|
"domain_visit_url": "Visita %s",
|
||||||
|
"enabled": "Attivato",
|
||||||
|
"error_server_unexpected": "Errore server inaspettata (%s)",
|
||||||
|
"footer_version": "Powered by <a href='https://yunohost.org'>YunoHost</a> %s.",
|
||||||
|
"form_input_example": "Esempio: %s",
|
||||||
|
"hook_conf_cron": "Lavori regolari",
|
||||||
|
"hook_conf_ynh_certs": "Certificati di sicurezza",
|
||||||
|
"hook_conf_ynh_mysql": "Password MySQL",
|
||||||
|
"hook_data_home_desc": "Dati utente collocati in /home/USER",
|
||||||
|
"local_archives": "Archivi locali",
|
||||||
|
"mailbox_quota_placeholder": "Lascia vuoto o metti 0 per disattivare.",
|
||||||
|
"postinstall_domain": "Questo è il primo nome di dominio collegato al tuo server Yunohost, ma anche quello che verrà usato dagli utenti del tuo server per accedere al portale di autenticazione. Di conseguenza sarà visibile da tutti, perciò sceglilo con cura.",
|
||||||
|
"postinstall_intro_2": "Due passi nella configurazione sono ancora requisiti per attivare i servizi del tuo server.",
|
||||||
|
"postinstall_intro_3": "Puoi ottenere ulteriori informazioni visitando la <a href='//yunohost.org/postinstall' target='_blank'>pagina appropriata nella documentazione</a>",
|
||||||
|
"process": "Procedi",
|
||||||
|
"running": "In attività",
|
||||||
|
"storage_create": "Aggiungi uno spazio remoto",
|
||||||
|
"storages_no": "Nessun spazio.",
|
||||||
|
"system_update": "Aggiornamento del sistema",
|
||||||
|
"tools_download_ca": "Scarica la Certificate Authority (CA) SSL",
|
||||||
|
"tools_download_ca_desc": "Clicca per scaricare la tua certificate authority (CA) SSL",
|
||||||
|
"upload_archive": "Caricamento del archivio",
|
||||||
|
"check_mx": "Registrazione MX",
|
||||||
|
"user_mailbox_use": "Spazio usato nella posta in arrivo",
|
||||||
|
"versions": "Versioni",
|
||||||
|
"certificate_alert_not_valid": "CRITICO: il certificato attuale non è valido ! HTTPS non funzionerà per niente !",
|
||||||
|
"certificate_alert_selfsigned": "AVVERTIMENTO: il certificato è auto-firmato. I browser esporranno un avvertimento ai nuovi visitatori !"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
"allowed_users": "Toegelaten gebruikers",
|
"allowed_users": "Toegelaten gebruikers",
|
||||||
"api_not_responding": "API reageert niet",
|
"api_not_responding": "API reageert niet",
|
||||||
"app_access": "Toegang",
|
"app_access": "Toegang",
|
||||||
"app_access_addall_btn": "Toegang tot alles toevoegen",
|
"app_access_addall_btn": "Toegang geven aan alle gebruikers",
|
||||||
"app_access_addall_desc": "Alle bestaande gebruikers zullen toegang hebben tot %s.",
|
"app_access_addall_desc": "Alle bestaande gebruikers zullen toegang hebben tot %s.",
|
||||||
"app_access_clearall_btn": "Alle toegang verwijderen",
|
"app_access_clearall_btn": "Alle toegang verwijderen",
|
||||||
"app_access_clearall_desc": "Alle gebruikers zullen toegang hebben tot %s.",
|
"app_access_clearall_desc": "Alle gebruikers zullen toegang hebben tot %s.",
|
||||||
"app_access_removeall_btn": "Alle toegang verwijderen",
|
"app_access_removeall_btn": "Alle toegang verwijderen",
|
||||||
"app_access_removeall_desc": "Geen gebruikers zullen toegang hebben tot %s.",
|
"app_access_removeall_desc": "Geen gebruikers zullen toegang hebben tot %s.",
|
||||||
"app_access_title": "%s toegang",
|
"app_access_title": "%s toegang",
|
||||||
"app_debug_no_logs": "Applicatielogs zijn niet beschikbaar",
|
"app_debug_no_logs": "Logs niet beschikbaar voor dit programma",
|
||||||
"app_debug_tab": "Toon debuginformatie",
|
"app_debug_tab": "Toon debuginformatie",
|
||||||
"app_info_access_desc": "Beheer gebruikerstoegang. Toegelaten gebruikers: %s",
|
"app_info_access_desc": "Beheer gebruikerstoegang. Toegelaten gebruikers: %s",
|
||||||
"app_info_debug_desc": "Toon debuginformatie voor deze applicatie.",
|
"app_info_debug_desc": "Toon debuginformatie voor deze applicatie.",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"backup_archive_download": "Download dit archief",
|
"backup_archive_download": "Download dit archief",
|
||||||
"backup_content": "Backupinhoud",
|
"backup_content": "Backupinhoud",
|
||||||
"backup_create": "Creëer een backup",
|
"backup_create": "Creëer een backup",
|
||||||
"backup_encryption_warning": "Vergeet dit wachtwoord niet, je hebt het nodig als je dit archief wil herstellen",
|
"backup_encryption_warning": "Vergeet dit wachtwoord niet, je hebt het nodig als je dit archief wilt herstellen",
|
||||||
"backup_new": "Nieuwe backup",
|
"backup_new": "Nieuwe backup",
|
||||||
"backup_optional_encryption": "Optionele encryptie",
|
"backup_optional_encryption": "Optionele encryptie",
|
||||||
"backup_optional_password": "Optioneel wachtwoord",
|
"backup_optional_password": "Optioneel wachtwoord",
|
||||||
|
@ -144,8 +144,8 @@
|
||||||
"log": "Log",
|
"log": "Log",
|
||||||
"logged_in": "Ingelogd",
|
"logged_in": "Ingelogd",
|
||||||
"logged_out": "Uitgelogd",
|
"logged_out": "Uitgelogd",
|
||||||
"login": "Log in",
|
"login": "Inloggen",
|
||||||
"logout": "Log uit",
|
"logout": "Uitloggen",
|
||||||
"mailbox_quota_description": "",
|
"mailbox_quota_description": "",
|
||||||
"manage_apps": "Apps beheren",
|
"manage_apps": "Apps beheren",
|
||||||
"manage_domains": "Domeinnamen beheren",
|
"manage_domains": "Domeinnamen beheren",
|
||||||
|
@ -275,5 +275,18 @@
|
||||||
"warning_first_user": "Je moet eerst een <a href='#/users/create' class='alert-link'>gebruiker aanmaken</a>.",
|
"warning_first_user": "Je moet eerst een <a href='#/users/create' class='alert-link'>gebruiker aanmaken</a>.",
|
||||||
"write": "Schrijf",
|
"write": "Schrijf",
|
||||||
"wrong_password": "Foutief wachtwoord",
|
"wrong_password": "Foutief wachtwoord",
|
||||||
"yes": "Ja"
|
"yes": "Ja",
|
||||||
|
"remove": "Verwijderen",
|
||||||
|
"app_change_label": "Label veranderen",
|
||||||
|
"app_change_url": "URL veranderen",
|
||||||
|
"app_info_changelabel_desc": "App label veranderen in het portaal.",
|
||||||
|
"app_info_changeurl_desc": "URL van deze applicatie veranderen (domein en/of locatie).",
|
||||||
|
"app_info_change_url_disabled_tooltip": "Functie is nog niet geïmplementeerd voor deze applicatie",
|
||||||
|
"app_repository": "Oorsprong van applicatie: ",
|
||||||
|
"app_state": "Status van applicatie: ",
|
||||||
|
"app_state_inprogress": "Lopende operatie",
|
||||||
|
"app_state_notworking": "Werkt niet",
|
||||||
|
"app_state_validated": "Bevestigd",
|
||||||
|
"app_state_working": "Werkt",
|
||||||
|
"ok": "OK"
|
||||||
}
|
}
|
||||||
|
|
382
src/locales/oc.json
Normal file
382
src/locales/oc.json
Normal file
|
@ -0,0 +1,382 @@
|
||||||
|
{
|
||||||
|
"action": "Accion",
|
||||||
|
"add": "Ajustar",
|
||||||
|
"remove": "Levar",
|
||||||
|
"administration_password": "Senhal d’administracion",
|
||||||
|
"allowed_users": "Personas autorizadas",
|
||||||
|
"api_not_responding": "L’API respond pas",
|
||||||
|
"app_access": "Accès",
|
||||||
|
"app_access_addall_btn": "Activar l’accès per totes",
|
||||||
|
"app_access_addall_desc": "Totes los utilizaires existents auràn accès a %s.",
|
||||||
|
"app_access_clearall_desc": "Qual que siá aurà accès a %s.",
|
||||||
|
"app_access_removeall_btn": "Levar totes los accèsses",
|
||||||
|
"app_access_removeall_desc": "Degun aurà pas accès a %s.",
|
||||||
|
"app_access_title": "Accès %s",
|
||||||
|
"app_change_label": "Cambiar l’apelacion",
|
||||||
|
"app_change_url": "Cambiar l’URL",
|
||||||
|
"app_debug_no_logs": "Los jornals d’activitats de l’aplicacions son pas disponibles",
|
||||||
|
"app_debug_tab": "Mostrar las informacions de desbugatge",
|
||||||
|
"app_info_access_desc": "Gestion dels accèsses dels utilizaires. Utilizaires autorizats : %s",
|
||||||
|
"app_info_changelabel_desc": "Cambiar l’apelacion de l’aplicacion pel portal.",
|
||||||
|
"app_info_change_url_disabled_tooltip": "Aquesta foncionalitat es pas encara presa en carga per aquesta aplicacion pel moment",
|
||||||
|
"app_info_uninstall_desc": "Suprimir aquesta aplicacion.",
|
||||||
|
"app_install_cancel": "Installacion anullada.",
|
||||||
|
"app_install_custom_no_manifest": "Cap de fichièr manifest.json",
|
||||||
|
"app_list": "Lista d’aplicacions",
|
||||||
|
"app_make_default": "Definir per defaut",
|
||||||
|
"app_state_inprogress": "En cors",
|
||||||
|
"app_state_notworking": "Pas en foncion",
|
||||||
|
"app_state_validated": "Validada",
|
||||||
|
"app_state_working": "Lançada",
|
||||||
|
"application": "Aplicacion",
|
||||||
|
"applications": "Aplicacions",
|
||||||
|
"archive_empty": "Archiu void",
|
||||||
|
"available": "Disponible",
|
||||||
|
"available_apps": "Aplicacions disponiblas",
|
||||||
|
"backup": "Salvagarda",
|
||||||
|
"backup_action": "Salvagardar",
|
||||||
|
"backup_archive_delete": "Suprimir l’archiu",
|
||||||
|
"backup_archive_download": "Telecargar l’archiu",
|
||||||
|
"backup_content": "Contengut de la salvagarda",
|
||||||
|
"backup_create": "Crear una salvagarda",
|
||||||
|
"backup_encryption_warning": "Doblidetz pas aqueste senhal, vos farà mestièr per restaurar aquesta salvagarda",
|
||||||
|
"backup_new": "Nòva salvagarda",
|
||||||
|
"backup_optional_encryption": "Chiframent opcional",
|
||||||
|
"backup_optional_password": "Senhal opcional",
|
||||||
|
"backup_type": "Tip",
|
||||||
|
"backups_no": "Cap de salvagarda",
|
||||||
|
"begin": "Zo",
|
||||||
|
"bit_rate": "Debit",
|
||||||
|
"cancel": "Anullar",
|
||||||
|
"check": "Verificacion",
|
||||||
|
"check_mx": "Enregistrament MX",
|
||||||
|
"check_stmp": "Accessibilitat del pòrt 25",
|
||||||
|
"close": "Tampar",
|
||||||
|
"app_access_clearall_btn": "Escafar totes los accèsses",
|
||||||
|
"app_info_debug_desc": "Mostrar las informacions de desbogatge per aquesta aplicacion.",
|
||||||
|
"app_info_default_desc": "Mandar la raiç del domeni cap a aquesta aplicacion (%s).",
|
||||||
|
"app_info_changeurl_desc": "Cambiar l’adreça d’accès d’aquesta aplicacion (domeni e/o camin).",
|
||||||
|
"app_repository": "Origina de l’aplicacion : ",
|
||||||
|
"app_state": "Estat de l’aplicacion : ",
|
||||||
|
"backup_archive_copy": "Copiar aquesta salvagarda dins un autre emplaçament",
|
||||||
|
"backup_experimental_warning": "Gardatz al cap qu’aquesta foncionalitat de salvagarda es encara experimentala, e es pas totalament fiabla.",
|
||||||
|
"both": "Los dos",
|
||||||
|
"confirm_access_add": "Volètz vertadièrament ajustar l’accès a %s per totes los utilizaires ?",
|
||||||
|
"confirm_access_clear": "Volètz vertadièrament escafar totes los accèsses a %s ?",
|
||||||
|
"confirm_access_remove_all": "Volètz vertadièrament escafar totes los accèsses a %s ?",
|
||||||
|
"confirm_access_remove_user": "Volètz vertadièrament escafar l’accès a %s per %s ?",
|
||||||
|
"confirm_app_change_url": "Volètz vertadièrament cambiar l’adreça d’accès d’aquesta aplicacion ?",
|
||||||
|
"confirm_app_default": "Volètz vertadièrament definir aquesta aplicacion coma aplicacion per defaut ?",
|
||||||
|
"confirm_change_maindomain": "Volètz vertadièrament cambiar lo domeni màger ?",
|
||||||
|
"confirm_delete": "Volètz vertadièrament escafar %s ?",
|
||||||
|
"confirm_firewall_open": "Volètz vertadièrament dobrir lo pòrt %s ? (protocòl : %s, connexion : %s)",
|
||||||
|
"confirm_firewall_close": "Volètz vertadièrament tampar lo pòrt %s ? (protocòl : %s, connexion : %s)",
|
||||||
|
"confirm_install_custom_app": "L’installacion d’aplicacions tèrças pòt perilhar la seguretat. D’utilizar amb vòstra resèrva.",
|
||||||
|
"confirm_install_domain_root": "Poiretz pas installar mai aplicacions sus %s. Contunhar ?",
|
||||||
|
"confirm_migrations_skip": "Passar las migracions es pas recomandat. Volètz vertadièrament o far ?",
|
||||||
|
"confirm_postinstall": "Sètz a man de lançar lo processús de post-installacion sul domeni %s. Aquò pòt tardar una estona, *arrestetz pas l’operacion*.",
|
||||||
|
"confirm_restore": "Volètz vertadièrament restaurar %s ?",
|
||||||
|
"confirm_service_start": "Volètz vertadièrament aviar %s ?",
|
||||||
|
"confirm_service_stop": "Volètz vertadièrament arrestar %s ?",
|
||||||
|
"confirm_service_enable": "Volètz vertadièrament activar %s ?",
|
||||||
|
"confirm_service_disable": "Volètz vertadièrament desactivar %s ?",
|
||||||
|
"confirm_uninstall": "Volètz vertadièrament desinstallar %s ?",
|
||||||
|
"confirm_update_apps": "Volètz vertadièrament metre a jorn totas las aplicacions ?",
|
||||||
|
"confirm_update_packages": "Volètz vertadièrament metre a jorn totes los paquets ?",
|
||||||
|
"confirm_update_specific_app": "Volètz vertadièrament metre a jorn %s ?",
|
||||||
|
"confirm_upnp_enable": "Volètz vertadièrament activar l’UPnP ?",
|
||||||
|
"confirm_upnp_disable": "Volètz vertadièrament desactivar l’UPnP ?",
|
||||||
|
"confirm_reboot_action_reboot": "Volètz vertadièrament reaviar lo servidor ?",
|
||||||
|
"confirm_reboot_action_shutdown": "Volètz vertadièrament escantir lo servidor ?",
|
||||||
|
"connection": "Connexion",
|
||||||
|
"copy": "Copiar",
|
||||||
|
"count_min": "%s min",
|
||||||
|
"cpu_load": "Carga CPU",
|
||||||
|
"created_at": "Creat lo",
|
||||||
|
"cumulative_usage": "Cumul",
|
||||||
|
"custom_app_install": "Installar una aplicacion personalizada",
|
||||||
|
"custom_app_url_only_github": "Sonque a partir de GitHub",
|
||||||
|
"default": "Defaut",
|
||||||
|
"delete": "Suprimir",
|
||||||
|
"description": "Descripcion",
|
||||||
|
"diagnosis": "Diagnostic",
|
||||||
|
"diagnosis_hide_private": "Mostrar lo diagnostic sens donadas sensiblas",
|
||||||
|
"diagnosis_view_private": "Mostrar lo diagnostic amb las donadas sensiblas",
|
||||||
|
"diagnosis_with_private": "Diagnostic amb las donadas sensiblas",
|
||||||
|
"disable": "Desactivar",
|
||||||
|
"disabled": "Desactivat",
|
||||||
|
"disk": "Disc",
|
||||||
|
"dns": "DNS",
|
||||||
|
"domain": "Domeni",
|
||||||
|
"domain_add": "Ajustar un domeni",
|
||||||
|
"domain_add_dns_doc": "… e ai <a href='//yunohost.org/dns'>>corrèctament configurat mos DNS</a>.",
|
||||||
|
"domain_add_dyndns_doc": "… e desiri un nom de domeni preconfigurat.",
|
||||||
|
"domain_add_panel_with_domain": "Ai ja mon nom de domeni…",
|
||||||
|
"domain_add_panel_without_domain": "Ai pas de nom de domeni…",
|
||||||
|
"domain_default": "Domeni per defaut",
|
||||||
|
"domain_default_desc": "Los utilizaires se connectaràn al domeni per defaut.",
|
||||||
|
"domain_default_longdesc": "Aquò es vòstre domeni per defaut.",
|
||||||
|
"domain_delete_longdesc": "Suprimir aqueste domeni",
|
||||||
|
"domain_dns_config": "Configuracion DNS",
|
||||||
|
"domain_dns_longdesc": "Veire la configuracion DNS",
|
||||||
|
"domain_list": "Lista de domenis",
|
||||||
|
"domain_name": "Nom de domeni",
|
||||||
|
"domain_select": "Seleccionatz un domeni",
|
||||||
|
"domain_visit": "Visitar",
|
||||||
|
"domain_visit_url": "Visitar %s",
|
||||||
|
"domains": "Domenis",
|
||||||
|
"download": "Telecargar",
|
||||||
|
"enable": "Activar",
|
||||||
|
"enabled": "Activat",
|
||||||
|
"error_modify_something": "Vos cal modificar quicòm",
|
||||||
|
"error_occured": "Una error s’es producha, tornatz ensajar",
|
||||||
|
"error_retrieve_feed": "Impossible de trapar lo flux : %s",
|
||||||
|
"error_select_domain": "Deuriatz indicar un domeni",
|
||||||
|
"error_server": "Error servidor",
|
||||||
|
"error_server_unexpected": "Error pas esperada (%s)",
|
||||||
|
"everyone_has_access": "Totes los utilizaires an accès.",
|
||||||
|
"filesystem": "Sistèma de fichièr",
|
||||||
|
"firewall": "Parafuòc",
|
||||||
|
"footer_version": "Propulsat per <a href='https://yunohost.org'>YunoHost</a> %s (%s).",
|
||||||
|
"form_input_example": "Exemple %s",
|
||||||
|
"free": "Liure",
|
||||||
|
"fs_type": "Tipe de sistèma de fichièr",
|
||||||
|
"gateway": "Palanca : ",
|
||||||
|
"home": "Acuèlh",
|
||||||
|
"hook_adminjs_group_configuration": "Configuracion",
|
||||||
|
"hook_conf_cron": "Tascas abitualas",
|
||||||
|
"hook_conf_ldap": "LDAP",
|
||||||
|
"hook_conf_nginx": "Nginx",
|
||||||
|
"hook_conf_ssh": "SSH",
|
||||||
|
"hook_conf_ssowat": "SSOwat",
|
||||||
|
"hook_conf_xmpp": "XMPP",
|
||||||
|
"hook_conf_ynh_certs": "Certificat de seguretat",
|
||||||
|
"hook_conf_ynh_firewall": "Parafuòc",
|
||||||
|
"hook_conf_ynh_mysql": "Senhal MySQL",
|
||||||
|
"hook_data_home": "Donadas utilizaires",
|
||||||
|
"hook_data_home_desc": "Las donadas utilizaires son plaçadas dins /home/USER",
|
||||||
|
"hook_data_mail": "Corrièl",
|
||||||
|
"hook_data_mail_desc": "Los corrièls que encara sul servidor",
|
||||||
|
"hostname": "Nom d’òst",
|
||||||
|
"id": "ID",
|
||||||
|
"inactive": "Inactiu",
|
||||||
|
"infos": "Info",
|
||||||
|
"install": "Installar",
|
||||||
|
"install_name": "Installar %s",
|
||||||
|
"install_time": "Data d’installacion",
|
||||||
|
"installation_complete": "Installacion acabada",
|
||||||
|
"installed": "Installat",
|
||||||
|
"installed_apps": "Aplicacions installadas",
|
||||||
|
"installing": "Installacion",
|
||||||
|
"interface": "Interfàcia",
|
||||||
|
"ipv4": "IPv4",
|
||||||
|
"ipv6": "IPv6",
|
||||||
|
"label": "Apelacion",
|
||||||
|
"label_for_manifestname": "Apelacion per %s",
|
||||||
|
"loading": "Cargament…",
|
||||||
|
"local_archives": "Archius locals",
|
||||||
|
"local_ip": "IP locala",
|
||||||
|
"log": "Jornal",
|
||||||
|
"logged_in": "Connectat",
|
||||||
|
"logged_out": "Desconnectat",
|
||||||
|
"login": "Connexion",
|
||||||
|
"logout": "Desconnexion",
|
||||||
|
"mailbox_quota_description": "Per exemple, 700M fa un CD, 4700M fa un DVD.",
|
||||||
|
"mailbox_quota_placeholder": "Daissatz void o a zèro per desactivar.",
|
||||||
|
"manage_apps": "Gerir las aplicacions",
|
||||||
|
"manage_domains": "Gerir los domenis",
|
||||||
|
"manage_users": "Gerir los utilizaires",
|
||||||
|
"memory": "Memòria",
|
||||||
|
"menu": "Menú",
|
||||||
|
"migrations": "Migracions",
|
||||||
|
"migrations_pending": "Migracion en espèra",
|
||||||
|
"migrations_done": "Migracions precedentas",
|
||||||
|
"migrations_no_pending": "Pas cap de migracion en espèra",
|
||||||
|
"migrations_no_done": "Pas cap de migracion precedenta",
|
||||||
|
"mode": "Mòde",
|
||||||
|
"monitoring": "Estat del servidor",
|
||||||
|
"monitoring_check_glances": "Verificatz l’estat del servici <a href='#/services/glances'>glances</a>.",
|
||||||
|
"monitoring_disabled": "Lo seguiment de l’estat del servidor es pas activat.",
|
||||||
|
"multi_instance": "Instància multipla",
|
||||||
|
"myserver": "monservidor",
|
||||||
|
"myserver_org": "monservidor.com",
|
||||||
|
"network": "Ret",
|
||||||
|
"next": "Seguent",
|
||||||
|
"no": "Non",
|
||||||
|
"no_allowed_users": "Cap d’utilizaire autorizat.",
|
||||||
|
"no_installed_apps": "Cap d’aplicacion installada.",
|
||||||
|
"no_log": "Cap de jornal.",
|
||||||
|
"no_user_to_add": "Degun a ajustar.",
|
||||||
|
"non_compatible_api": "API pas compatibla",
|
||||||
|
"ok": "OK",
|
||||||
|
"open": "Dobrir",
|
||||||
|
"operations": "Operacions",
|
||||||
|
"os": "OS",
|
||||||
|
"password": "Senhal",
|
||||||
|
"password_confirmation": "Confirmacion del senhla",
|
||||||
|
"password_description": "Lo senhal deu almens conténer %s caractèrs.",
|
||||||
|
"password_empty": "Lo camp senhal es void",
|
||||||
|
"password_new": "Nòu senhal",
|
||||||
|
"passwords_dont_match": "Los senhals correspondon pas",
|
||||||
|
"passwords_too_short": "Senhal tròp cort",
|
||||||
|
"path": "Repertòri",
|
||||||
|
"path_url": "Camin",
|
||||||
|
"port": "Pòrt",
|
||||||
|
"ports": "Pòrts",
|
||||||
|
"postinstall": "Post-installacion",
|
||||||
|
"postinstall_intro_1": "Òsca ! YunoHost es estat corrèctament installat.",
|
||||||
|
"previous": "Precedent",
|
||||||
|
"process": "Processús",
|
||||||
|
"protocol": "Protocòl",
|
||||||
|
"public_ip": "IP publica : ",
|
||||||
|
"ram": "RAM",
|
||||||
|
"read": "Lectura",
|
||||||
|
"read_more": "Ne saber mai",
|
||||||
|
"reception": "Recepcion",
|
||||||
|
"refresh_app_list": "Actualizar la lista",
|
||||||
|
"remove_access": "Levar los accèsses",
|
||||||
|
"restore": "Restaurar",
|
||||||
|
"run": "Lançar",
|
||||||
|
"running": "En execucion",
|
||||||
|
"save": "Salvagardar",
|
||||||
|
"select_user": "Causissètz un utilizaire",
|
||||||
|
"service_log": "Jornal de %s",
|
||||||
|
"service_start_on_boot": "Lançar en aviar : ",
|
||||||
|
"service_status": "Estatut : ",
|
||||||
|
"services": "Servicis",
|
||||||
|
"services_list": "Lista dels servicis",
|
||||||
|
"set_default": "Definir per defaut",
|
||||||
|
"size": "Talha",
|
||||||
|
"skip": "Passar",
|
||||||
|
"start": "Aviar",
|
||||||
|
"status": "Estatut",
|
||||||
|
"stop": "Arrestar",
|
||||||
|
"storage_create": "Ajustar un emmagazinatge alonhat",
|
||||||
|
"storages_new": "Nòu emmagazinatge alonhat",
|
||||||
|
"storages_no": "Pas d’emmagazinatge.",
|
||||||
|
"swap": "Espaci d’escambi",
|
||||||
|
"system": "Sistèma",
|
||||||
|
"system_apps": "Aplicacions",
|
||||||
|
"system_apps_nothing": "I a pas cap d’aplicacion de metre a jorn.",
|
||||||
|
"system_delayed_upgrade": "Mesa a jorn reportada",
|
||||||
|
"system_delayed_upgrade_warning": "<b>%s</b> serà mes a jorn dins l’ora venenta.",
|
||||||
|
"system_packages": "Paquets",
|
||||||
|
"system_packages_nothing": "Pas cap de paquet de metre a jorn.",
|
||||||
|
"system_update": "Metre a jorn lo sistèma",
|
||||||
|
"system_upgrade": "Mesa a jorn del sistèma",
|
||||||
|
"system_upgrade_btn": "Metre a jorn",
|
||||||
|
"system_upgrade_all_applications_btn": "Metre a jorn totas las aplicacions",
|
||||||
|
"system_upgrade_all_packages_btn": "Metre a jorn totes los paquets",
|
||||||
|
"tcp": "TCP",
|
||||||
|
"time_since_update": "Darrièra mesa a jorn : ",
|
||||||
|
"tools": "Aisinas",
|
||||||
|
"tools_adminpw": "Cambiar lo senhal d’administracion",
|
||||||
|
"tools_adminpw_confirm_placeholder": "Confirmatz lo novèl senhal",
|
||||||
|
"tools_adminpw_current": "Senhal actual",
|
||||||
|
"tools_adminpw_current_placeholder": "Picatz lo senhal actual",
|
||||||
|
"tools_adminpw_new_placeholder": "Picatz lo novèl senhal",
|
||||||
|
"tools_security_feed": "Alèrtas de seguretat",
|
||||||
|
"tools_security_feed_no_items": "Pas cap d’alèrta de seguretat",
|
||||||
|
"tools_security_feed_subscribe_rss": "S’inscriure al flux RSS de las alèrtas de seguretat",
|
||||||
|
"tools_security_feed_view_items": "Veire totas las alèrtas de seguretat",
|
||||||
|
"tools_reboot": "Reaviar lo servidor",
|
||||||
|
"tools_reboot_btn": "Reaviar",
|
||||||
|
"tools_reboot_done": "Reaviada…",
|
||||||
|
"tools_shutdown": "Atudar lo servidor",
|
||||||
|
"tools_shutdown_btn": "Atudar",
|
||||||
|
"tools_shutdown_done": "Arrèst en cors…",
|
||||||
|
"tools_shutdown_reboot": "Atudar/Reaviar",
|
||||||
|
"total": "Total",
|
||||||
|
"transmission": "Mandadís",
|
||||||
|
"udp": "UDP",
|
||||||
|
"unauthorized": "Pas autorizat",
|
||||||
|
"uninstall": "Desinstallar",
|
||||||
|
"unknown_action": "Accion %s desconeguda",
|
||||||
|
"unknown_argument": "Argument desconegut : %s",
|
||||||
|
"upload_archive": "Enviar una salvagarda",
|
||||||
|
"upnp": "UPnP",
|
||||||
|
"upnp_disabled": "L’UPnP es desactivat.",
|
||||||
|
"upnp_enabled": "L’UPnP es activat.",
|
||||||
|
"url": "URL",
|
||||||
|
"usage": "Utilizacion",
|
||||||
|
"used": "Utilizat",
|
||||||
|
"user_email": "Corrièl",
|
||||||
|
"user_emailaliases": "Adreças suplementàrias",
|
||||||
|
"user_emailforward": "Adreças de transferiment",
|
||||||
|
"user_fullname": "Nom complèt",
|
||||||
|
"user_interface_link": "Interfàcia utilizaire",
|
||||||
|
"user_username": "Nom d’utilizaire",
|
||||||
|
"users": "Utilizaires",
|
||||||
|
"users_list": "Lista dels utilizaires",
|
||||||
|
"users_new": "Nòu utilizaire",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "Aquesta pagina mòstra la configuracion *recomandada*. Configura *pas* lo DNS per vos. Es vòstra responsabilitat la configuracion de la zòna DNS en çò vòstre registrar DNS amb aquesta recomandacion.",
|
||||||
|
"internal_exception": "<strong>YunoHost a rescontrat una error intèrna :/</strong><br><em>O planhèm.<br>Deuriatz cercar d’ajuda al <a href=\"https://forum.yunohost.org/\">forum</a> o al <a href=\"https://chat.yunohost.org/\">salon</a> per resòlver lo problèma, o raportar lo bug sus <a href=\"https://dev.yunohost.org/projects/yunohost/issues\">l’aisina de seguiment</a>.</em><br>Las informacions seguentas pòdon èsser utilas a vòstres interlocutors que vos ajuda :<h3>Accion</h3><pre>%s %s</pre><h3>Traça</h3><pre>%s</pre>",
|
||||||
|
"mount_point": "Ponch de montatge",
|
||||||
|
"postinstall_domain": "Aquò es lo primièr nom de domeni ligat al servidor YunoHost, mas tanben lo que servirà al portanèl d’identificacion. Serà doncas visible per totes los utilizaires, causissètz-lo amb suènh.",
|
||||||
|
"postinstall_intro_2": "Doas etapas mai son necessàrias per activar lo servidor.",
|
||||||
|
"postinstall_intro_3": "Podètz trapar mai d’informacion en anar a <a href='//yunohost.org/postinstall' target='_blank'> la pagina de documentacion en question</a>",
|
||||||
|
"postinstall_password": "Aqueste senhal vos permetrà d’accedir a l’interfàcia d’administracion e de contrarotlar lo servidor. Prenètz lo temps de ne causir un bon.",
|
||||||
|
"tools_download_ca": "Telecargar l’autoritat de certificacion SSL (CA)",
|
||||||
|
"tools_download_ca_desc": "Clicatz aicí per telecargar l’autoritat de certificacion SSL (CA)",
|
||||||
|
"tools_rebooting": "Lo servidor es a tornar aviar. Per tornar a l’interfàcia d’administracion devètz esperar que lo servidor siá aviat. Podètz o verificar en actualizant aquesta pagina (F5).",
|
||||||
|
"tools_shuttingdown": "Lo servidor es atudat. Del temps que lo servidor es atudat podètz pas accedir a l’interfàcia d’administracion.",
|
||||||
|
"upload": "Partejar amb yunopaste",
|
||||||
|
"uptime": "Durada de foncionament",
|
||||||
|
"user_new_forward": "novel_transferiment@domenialonhat.org",
|
||||||
|
"user_new_mail": "novela_adreça@domeni.org",
|
||||||
|
"user_username_edit": "Modificar lo compte a %s",
|
||||||
|
"users_no": "Pas cap d’utilizaire.",
|
||||||
|
"versions": "Versions",
|
||||||
|
"view_user_profile": "Veire lo perfil a %s",
|
||||||
|
"warning_first_user": "Vos cal d’en primièr <a href='#/users/create' class='alert-link'>crear un utilizaire</a>.",
|
||||||
|
"write": "Escriure",
|
||||||
|
"wrong_password": "Senhal incorrècte",
|
||||||
|
"yes": "Òc",
|
||||||
|
"certificate_alert_good": "Va ben, lo certificat actual sembla bon !",
|
||||||
|
"certificate_alert_unknown": "Estatut desconegut",
|
||||||
|
"certificate_manage": "Gerir los certificats SSL",
|
||||||
|
"ssl_certificate": "Certificat SSL",
|
||||||
|
"confirm_cert_install_LE": "Volètz vertadièrament installar un certificat Let’s Encrypt per aqueste domeni ?",
|
||||||
|
"confirm_cert_regen_selfsigned": "Volètz vertadièrament tornar generar un certificat auto-signat per aqueste domeni ?",
|
||||||
|
"confirm_cert_manual_renew_LE": "Volètz vertadièrament tornar renovelar manualament lo certificat Let’s Encrypt per aqueste domeni ?",
|
||||||
|
"confirm_cert_revert_to_selfsigned": "Volètz vertadièrament tornar metre un certificat auto-signat per aqueste domeni ?",
|
||||||
|
"certificate": "Certificat",
|
||||||
|
"certificate_status": "Estatut del certificat",
|
||||||
|
"certificate_authority": "Autoritat de certificacion",
|
||||||
|
"validity": "Validitat",
|
||||||
|
"domain_is_eligible_for_ACME": "Aqueste domeni sembla corrèctament configurat per installat un certificat Let’s Encrypt !",
|
||||||
|
"install_letsencrypt_cert": "Installar un certificat Let’s Encrypt",
|
||||||
|
"manually_renew_letsencrypt": "Tornar renovelar manualament ara",
|
||||||
|
"regenerate_selfsigned_cert_message": "Se volètz, podètz tornar generar los certificats auto-signats.",
|
||||||
|
"regenerate_selfsigned_cert": "Tornar generar los certificats auto-signats",
|
||||||
|
"revert_to_selfsigned_cert": "Tornar un certificat auto-signat",
|
||||||
|
"appslists": "Listas d’aplicacions",
|
||||||
|
"appslists_no_lists": "Pas cap de lista d’aplicacions",
|
||||||
|
"appslists_custom": "Lista personalizada d’aplicacions",
|
||||||
|
"appslists_manage": "Gerir las listas d’aplicacions",
|
||||||
|
"appslists_confirm_remove": "Volètz vertadièrament suprimir aquesta lista d’aplicacions ?",
|
||||||
|
"appslists_info_refresh_desc": "Actualizar l’estatut de las aplicacions de la lista.",
|
||||||
|
"appslists_info_remove_desc": "Las aplicacions d’aquesta lista seràn pas mai disponiblas.",
|
||||||
|
"appslists_last_update": "Darrièra mesa a jorn",
|
||||||
|
"appslists_unknown_list": "La lista « %s » es desconeguda",
|
||||||
|
"appslists_community_list": "Lista de las aplicacions de la comunitat",
|
||||||
|
"name": "Nom",
|
||||||
|
"install_community_appslists_info": "La lista de las aplicacions de la comunitat vos permet d’installar d’aplicacion mantengudas per la comunitat.<br /> Gaitatz la lista complèta sus <a href='https://yunohost.org/apps_in_progress'>yunohost.org/apps_in_progress</a>.",
|
||||||
|
"install_community_appslists_warning": "Aquestas aplicacions <strong>son pas</strong> oficialas, nimai mantengudas per la còla YunoHost.<br /> Installar aquestas aplicacions es amb vòstra resèrva, pòt perilhar vòstre sistèma.",
|
||||||
|
"install_custom_app_appslists_info": "Podètz utilizar de listas alternativas d’aplicacions per installar mai aplicacions mantengudas per la comunitat YunoHost.",
|
||||||
|
"io": "E/S",
|
||||||
|
"service_description": "Descripcion :",
|
||||||
|
"user_mailbox_quota": "Quòta de la bóstia de las letras",
|
||||||
|
"user_mailbox_use": "Espaci utilizat per la bóstia de las letras",
|
||||||
|
"certificate_alert_not_valid": "Critic : lo certificat actual es invalid ! Lo HTTPS foncionarà pas ges !",
|
||||||
|
"certificate_alert_selfsigned": "Atencion : lo certificat actual es auto-signat. Los navegadors mostraràn una alèrta espaventosa als nòus visitaires !",
|
||||||
|
"certificate_alert_letsencrypt_about_to_expire": "Lo certificat actual es a man d’expirar. Calrà lèu lo renovar automaticament.",
|
||||||
|
"certificate_alert_about_to_expire": "Atencion : lo certificat actual es a man d’expirar ! Serà pas renovat automaticament !",
|
||||||
|
"certificate_alert_great": "Perfièch ! Sètz a utilizar un certificat Let’s Encrypt valid !",
|
||||||
|
"certificate_old_letsencrypt_app_conflict": "L’aplicacion « letsencrypt » es actualament installada e es en conflicte amb aquesta foncionalitat. Mercés de la desinstallar per utilizar la novèla interfàcia de gestion dels certificats.",
|
||||||
|
"domain_not_eligible_for_ACME": "Aqueste domeni sembla pas prèst per un certificat Let’s Encrypt. Mercés de verificar la configuracion DNS e l’accessibilitat del servidor HTTP.",
|
||||||
|
"manually_renew_letsencrypt_message": "Lo certificat serà renovat automaticament pendent los 15 darrièrs jorns de validitat. Podètz lo renovar manualament se volètz. (Pas recomandat).",
|
||||||
|
"meltdown": "Sètz vulnerable a la falha de seguretat critica <a target=\"_blank\" href=\"https://meltdownattack.com/\">meltdown</a>. Per dire de resòlvre aqueste problèma, vos cal <a href=\"#/update\">actualizar vòstre sistèma</a> puèi <a href=\"#/tools/reboot\"> lo tornar aviar</a> per cargar lo nòu nuclèu linux.",
|
||||||
|
"revert_to_selfsigned_cert_message": "S’o volètz vertadièrament, podètz tornar installar lo certificat auto-signat. (Pas recomandat)",
|
||||||
|
"started_at": "Aviat a :"
|
||||||
|
}
|
|
@ -4,14 +4,14 @@
|
||||||
"administration_password": "Senha de administração",
|
"administration_password": "Senha de administração",
|
||||||
"allowed_users": "Utilizadores permitidos",
|
"allowed_users": "Utilizadores permitidos",
|
||||||
"app_access": "Aceder",
|
"app_access": "Aceder",
|
||||||
"app_access_addall_btn": "Adicionar acesso a todos",
|
"app_access_addall_btn": "Habilitar acesso a todos",
|
||||||
"app_access_addall_desc": "Todos os utilizadores existentes terão acesso a %s.",
|
"app_access_addall_desc": "Todos os utilizadores existentes terão acesso a %s.",
|
||||||
"app_access_clearall_btn": "Limpar todos os acessos",
|
"app_access_clearall_btn": "Limpar todos os acessos",
|
||||||
"app_access_clearall_desc": "Qualquer utilizador terá acesso a %s.",
|
"app_access_clearall_desc": "Qualquer utilizador terá acesso a %s.",
|
||||||
"app_access_removeall_btn": "Remover todos os acessos",
|
"app_access_removeall_btn": "Remover todos os acessos",
|
||||||
"app_access_removeall_desc": "Nenhum utilizador terá acesso a %s.",
|
"app_access_removeall_desc": "Nenhum utilizador terá acesso a %s.",
|
||||||
"app_access_title": "%s acesso",
|
"app_access_title": "%s acesso",
|
||||||
"app_info_access_desc": "Manage user access. Allowed users: %s",
|
"app_info_access_desc": "Gerir acesso de usuários. Usuários permitidos: %s",
|
||||||
"app_info_default_desc": "Redirecionar domínio principal para esta aplicação (%s).",
|
"app_info_default_desc": "Redirecionar domínio principal para esta aplicação (%s).",
|
||||||
"app_info_uninstall_desc": "Remover esta aplicação.",
|
"app_info_uninstall_desc": "Remover esta aplicação.",
|
||||||
"app_list": "Lista de aplicações",
|
"app_list": "Lista de aplicações",
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
"logged_out": "Sessão terminada",
|
"logged_out": "Sessão terminada",
|
||||||
"login": "Iniciar sessão",
|
"login": "Iniciar sessão",
|
||||||
"logout": "Terminar sessão",
|
"logout": "Terminar sessão",
|
||||||
"manage_apps": "Manage apps",
|
"manage_apps": "Gerenciar aplicações",
|
||||||
"manage_domains": "Gerir domínios",
|
"manage_domains": "Gerir domínios",
|
||||||
"manage_users": "Gerir utilizadores",
|
"manage_users": "Gerir utilizadores",
|
||||||
"memory": "Memória",
|
"memory": "Memória",
|
||||||
|
@ -221,5 +221,13 @@
|
||||||
"warning_first_user": "Provavelmente precisa <a href='#/users/create' class='alert-link'>criar um utilizador</a> primeiro.",
|
"warning_first_user": "Provavelmente precisa <a href='#/users/create' class='alert-link'>criar um utilizador</a> primeiro.",
|
||||||
"write": "Escrita",
|
"write": "Escrita",
|
||||||
"wrong_password": "Senha errada",
|
"wrong_password": "Senha errada",
|
||||||
"yes": "Sim"
|
"yes": "Sim",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"remove": "Remover",
|
||||||
|
"api_not_responding": "API não está respondendo",
|
||||||
|
"app_change_label": "Mudar label",
|
||||||
|
"app_change_url": "Mudar URL",
|
||||||
|
"app_debug_no_logs": "Logs da aplicação não estão disponíveis",
|
||||||
|
"app_debug_tab": "Mostrar debug",
|
||||||
|
"ok": "Confirmar"
|
||||||
}
|
}
|
31
src/locales/ru.json
Normal file
31
src/locales/ru.json
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"action": "Действие",
|
||||||
|
"add": "Добавить",
|
||||||
|
"administration_password": "Пароль администратора",
|
||||||
|
"allowed_users": "Разрешенные пользователи",
|
||||||
|
"api_not_responding": "API не отвечает",
|
||||||
|
"app_access": "Доступ",
|
||||||
|
"app_access_addall_btn": "Включить доступ ко всем",
|
||||||
|
"app_access_addall_desc": "Все существующие пользователи будут иметь доступ к %s.",
|
||||||
|
"app_access_clearall_btn": "Очистить доступы",
|
||||||
|
"app_access_clearall_desc": "Каждый пользователь будет иметь доступ к %s.",
|
||||||
|
"app_access_removeall_btn": "Удалить все доступы",
|
||||||
|
"app_access_removeall_desc": "Пользователи не получат доступа к %s.",
|
||||||
|
"app_access_title": "%s доступ",
|
||||||
|
"app_debug_no_logs": "Журналы приложений недоступны",
|
||||||
|
"app_debug_tab": "Отображать отладочную информацию",
|
||||||
|
"app_info_access_desc": "Управление доступом пользователей. Разрешенные пользователи: %s",
|
||||||
|
"remove": "Удалить",
|
||||||
|
"app_info_default_desc": "Перенаправить домен root в это приложение (%s).",
|
||||||
|
"app_info_uninstall_desc": "Удалите это приложение.",
|
||||||
|
"app_install_cancel": "Установка отменена.",
|
||||||
|
"app_install_custom_no_manifest": "Нет файла manifest.json",
|
||||||
|
"app_list": "Нет файла manifest.json",
|
||||||
|
"app_make_default": "Использовать по умолчанию",
|
||||||
|
"app_repository": "Происхождение приложения: ",
|
||||||
|
"app_state": "Состояние приложения: ",
|
||||||
|
"app_state_inprogress": "Выполняется",
|
||||||
|
"app_state_validated": "Проверенный",
|
||||||
|
"app_state_working": "Работает",
|
||||||
|
"password": "Пароль"
|
||||||
|
}
|
|
@ -5,10 +5,17 @@
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/YunoHost/yunohost-admin"
|
"url": "https://github.com/YunoHost/yunohost-admin"
|
||||||
},
|
},
|
||||||
|
"scripts": {
|
||||||
|
"postinstall": "bower install",
|
||||||
|
"build": "gulp build",
|
||||||
|
"build-dev": "gulp build --dev",
|
||||||
|
"watch": "gulp watch",
|
||||||
|
"watch-dev": "gulp watch --dev"
|
||||||
|
},
|
||||||
"author": "Yunohost",
|
"author": "Yunohost",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://dev.yunohost.org/projects/yunohost"
|
"url": "https://github.com/YunoHost/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/YunoHost/yunohost-admin",
|
"homepage": "https://github.com/YunoHost/yunohost-admin",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
49
src/views/app/app_appslists_info.ms
Normal file
49
src/views/app/app_appslists_info.ms
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/apps">{{t 'applications'}}</a>
|
||||||
|
<a href="#/apps/lists">{{t 'appslists'}}</a>
|
||||||
|
<a href="#/apps/lists/{{name}}">{{appslist.name}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-info-circle"></span> {{t 'infos'}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>{{t 'name'}}</dt>
|
||||||
|
<dd>{{appslist.name}}</dd>
|
||||||
|
<dt>{{t 'url'}}</dt>
|
||||||
|
<dd>{{appslist.url}}</dd>
|
||||||
|
<dt>{{t 'appslists_last_update'}}</dt>
|
||||||
|
<dd>{{timestampToDate appslist.lastUpdate}}</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title">
|
||||||
|
<span class="fa-fw fa-wrench"></span> {{t 'operations'}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'appslists_info_refresh_desc'}}</p>
|
||||||
|
<a href="#/apps/lists/{{appslist.name}}/refresh" class="btn btn-info slide">
|
||||||
|
<span class="fa-refresh"></span> {{t 'refresh_app_list'}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{#appslist.removable}}
|
||||||
|
<hr>
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'appslists_info_remove_desc'}}</p>
|
||||||
|
<a href="#/apps/lists/{{appslist.name}}/remove" class="btn btn-danger slide back">
|
||||||
|
<span class="fa-trash-o"></span> {{t 'remove'}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{/appslist.removable}}
|
||||||
|
</div>
|
||||||
|
</div>
|
80
src/views/app/app_appslists_list.ms
Normal file
80
src/views/app/app_appslists_list.ms
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/apps">{{t 'applications'}}</a>
|
||||||
|
<a href="#/apps/lists">{{t 'appslists'}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-list"></span> {{t 'appslists'}}</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="list-group">
|
||||||
|
{{#appslists}}
|
||||||
|
<a href="#/apps/lists/{{name}}" class="list-group-item">
|
||||||
|
<span class="fa-chevron-right pull-right"></span>
|
||||||
|
<h2 class="list-group-item-heading">
|
||||||
|
{{name}}
|
||||||
|
</h2>
|
||||||
|
</a>
|
||||||
|
{{/appslists}}
|
||||||
|
{{^appslists}}
|
||||||
|
<p class="list-group-item text-warning">
|
||||||
|
<span class="fa-exclamation-triangle"></span>
|
||||||
|
{{t 'appslists_no_lists'}}
|
||||||
|
</p>
|
||||||
|
{{/appslists}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{^has_community_list}}
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-plus"></span> {{t 'appslists_community_list'}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="#/apps/lists" method="POST" class="form-horizontal">
|
||||||
|
<input type="hidden" name="appslist_name" value="community" required />
|
||||||
|
<input type="hidden" name="appslist_url" value="https://app.yunohost.org/community.json" required />
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-12 col-sm-12">
|
||||||
|
<p>{{t 'install_community_appslists_info'}}</p>
|
||||||
|
<p class="alert alert-warning">
|
||||||
|
<span class="fa-warning"></span> {{t 'install_community_appslists_warning'}}
|
||||||
|
</p>
|
||||||
|
<input type="submit" class="btn btn-success slide" value="{{t 'add'}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/has_community_list}}
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-plus"></span> {{t 'appslists_custom'}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="#/apps/lists" method="POST" class="form-horizontal">
|
||||||
|
<div class="form-group has-feedback">
|
||||||
|
<label for="appslist_name" class="col-md-2 col-sm-12 control-label">{{t 'name'}}</label>
|
||||||
|
<div class="col-md-10 col-sm-12">
|
||||||
|
<input type="text" id="appslist_name" name="appslist_name" class="form-control" value="" required />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group has-feedback">
|
||||||
|
<label for="appslist_url" class="col-md-2 col-sm-12 control-label">{{t 'url'}}</label>
|
||||||
|
<div class="col-md-10 col-sm-12">
|
||||||
|
<input type="url" id="appslist_url" name="appslist_url" class="form-control" value="" placeholder="https://app.yunohost.org/community.json" required />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-10 col-md-push-2 col-sm-12">
|
||||||
|
<input type="submit" class="btn btn-success slide" value="{{t 'add'}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
30
src/views/app/app_changelabel.ms
Normal file
30
src/views/app/app_changelabel.ms
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/apps" class="hidden-xs">{{t 'applications'}}</a>
|
||||||
|
<a href="#/apps" class="visible-xs">…</a>
|
||||||
|
<a href="#/apps/{{id}}">{{label}}</a>
|
||||||
|
<a href="#/apps/{{id}}/changelabel">{{t 'app_change_label'}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<form action="#/apps/{{id}}/changelabel" method="POST" class="form-horizontal form-app-install">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-tag"></span> {{t 'app_change_label'}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="label" class="col-sm-12">{{t 'label'}}</label>
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<input class="col-sm-12" type="text" id="label" name="label" class="form-control" value="{{label}}" required="required">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<input type="hidden" name="app" value="{{id}}">
|
||||||
|
<div class="text-center">
|
||||||
|
<input type="submit" class="btn btn-success slide back" value="{{t 'app_change_label'}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
38
src/views/app/app_changeurl.ms
Normal file
38
src/views/app/app_changeurl.ms
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/apps" class="hidden-xs">{{t 'applications'}}</a>
|
||||||
|
<a href="#/apps" class="visible-xs">…</a>
|
||||||
|
<a href="#/apps/{{id}}">{{label}}</a>
|
||||||
|
<a href="#/apps/{{id}}/changeurl">{{t 'app_change_url'}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<form action="#/apps/{{id}}/changeurl" method="POST" class="form-horizontal form-app-install">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-exchange"></span> {{t 'app_change_url'}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="domain" class="col-sm-12">{{t 'domain'}}</label>
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<select id="domain" name="domain" required class="form-control" {{{attributes}}}>
|
||||||
|
{{#each domains}}<option value="{{this.value}}" {{#if selected}}selected{{/if}}>{{this.label}}</option>{{/each}}
|
||||||
|
</select>
|
||||||
|
<span class="help-block help-block--link"><a href='#/domains'>{{t 'manage_domains'}}</a></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label for="path" class="col-sm-12">{{t 'path_url'}}</label>
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<input class="col-sm-12" type="text" id="path" name="path" class="form-control" value="{{path}}" required="required">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<input type="hidden" name="app" value="{{id}}">
|
||||||
|
<div class="text-center">
|
||||||
|
<input type="submit" class="btn btn-success slide back" value="{{t 'app_change_url'}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
|
@ -15,6 +15,8 @@
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<dt>{{t 'id'}}</dt>
|
<dt>{{t 'id'}}</dt>
|
||||||
<dd>{{settings.id}}</dd>
|
<dd>{{settings.id}}</dd>
|
||||||
|
<dt>{{t 'label'}}</dt>
|
||||||
|
<dd>{{settings.label}}</dd>
|
||||||
<dt>{{t 'description'}}</dt>
|
<dt>{{t 'description'}}</dt>
|
||||||
<dd>{{description}}</dd>
|
<dd>{{description}}</dd>
|
||||||
<dt>{{t 'multi_instance'}}</dt>
|
<dt>{{t 'multi_instance'}}</dt>
|
||||||
|
@ -34,6 +36,13 @@
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'app_info_changelabel_desc' settings.label}}</p>
|
||||||
|
<a href="#/apps/{{settings.id}}/changelabel" class="btn btn-info slide">
|
||||||
|
<span class="fa-tag"></span> {{t 'app_change_label'}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<p>{{t 'app_info_access_desc' settings.allowed_users}}</p>
|
<p>{{t 'app_info_access_desc' settings.allowed_users}}</p>
|
||||||
<a href="#/apps/{{settings.id}}/access" class="btn btn-info slide">
|
<a href="#/apps/{{settings.id}}/access" class="btn btn-info slide">
|
||||||
|
@ -48,6 +57,21 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'app_info_changeurl_desc' settings.domain}}</p>
|
||||||
|
{{#if change_url}}
|
||||||
|
<a href="#/apps/{{settings.id}}/changeurl" class="btn btn-info slide">
|
||||||
|
<span class="fa-exchange"></span> {{t 'app_change_url'}}
|
||||||
|
</a>
|
||||||
|
{{else}}
|
||||||
|
{{#tooltip (t 'app_info_change_url_disabled_tooltip') }}
|
||||||
|
<a href="#/apps/{{settings.id}}/changeurl" class="btn btn-info slide disabled">
|
||||||
|
<span class="fa-exchange"></span> {{t 'app_change_url'}}
|
||||||
|
</a>
|
||||||
|
{{/tooltip}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<p>{{t 'app_info_uninstall_desc'}}</p>
|
<p>{{t 'app_info_uninstall_desc'}}</p>
|
||||||
<a href="#/apps/{{settings.id}}/uninstall" class="btn btn-danger slide back">
|
<a href="#/apps/{{settings.id}}/uninstall" class="btn btn-danger slide back">
|
||||||
|
@ -63,3 +87,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{{load_tooltips}}
|
||||||
|
|
|
@ -40,19 +40,29 @@
|
||||||
{{#manifest.arguments.install}}
|
{{#manifest.arguments.install}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="{{name}}" class="col-sm-12">{{label}}</label>
|
<label for="{{name}}" class="col-sm-12">{{label}}</label>
|
||||||
|
|
||||||
|
{{#if helpText}}
|
||||||
|
<span class="help-block help-block--help col-sm-12">{{{helpText}}}</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
|
||||||
{{#if choices}}
|
{{#if choices}}
|
||||||
<select id="{{name}}" name="{{name}}" required class="form-control" {{attributes}}>
|
<select id="{{name}}" name="{{name}}" required class="form-control" {{{attributes}}}>
|
||||||
{{#choices}}<option value="{{value}}" {{#if selected}}selected{{/if}}>{{label}}</option>{{/choices}}
|
{{#choices}}<option value="{{value}}" {{#if selected}}selected{{/if}}>{{label}}</option>{{/choices}}
|
||||||
</select>
|
</select>
|
||||||
{{else}}
|
{{else}}
|
||||||
<input type="{{inputType}}" id="{{name}}" name="{{name}}" class="form-control" value="{{default}}" placeholder="{{example}}" {{required}} {{attributes}}>
|
<input type="{{inputType}}" id="{{name}}" name="{{name}}" class="form-control" value="{{default}}" placeholder="{{example}}" {{required}} {{{attributes}}}>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if help}}
|
{{#if helpLink}}
|
||||||
<span class="help-block">{{{help}}}</span>
|
<span class="help-block help-block--link">{{{helpLink}}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if example}}
|
||||||
|
<span class="help-block help-block--example">{{t 'form_input_example' example}}</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/manifest.arguments.install}}
|
{{/manifest.arguments.install}}
|
||||||
|
|
|
@ -5,7 +5,10 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="actions-group">
|
<div class="actions-group">
|
||||||
<a href="#/apps/refresh" class="btn btn-info">
|
<a href="#/apps/lists" class="btn btn-success">
|
||||||
|
<span class="fa-list"></span> {{t 'appslists_manage'}}
|
||||||
|
</a>
|
||||||
|
<a href="#/apps/lists/refresh" class="btn btn-info">
|
||||||
<span class="fa-refresh"></span> {{t 'refresh_app_list'}}
|
<span class="fa-refresh"></span> {{t 'refresh_app_list'}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,17 +30,8 @@
|
||||||
{{/official}}
|
{{/official}}
|
||||||
</a>
|
</a>
|
||||||
{{/apps}}
|
{{/apps}}
|
||||||
|
|
||||||
{{^apps}}
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
<span class="fa-exclamation-triangle"></span>
|
|
||||||
{{t 'no_installed_apps'}}
|
|
||||||
</div>
|
|
||||||
{{/apps}}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{^installed_apps}}
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h2 class="panel-title"><span class="fa-fw fa-download"></span> {{t 'custom_app_install'}}</h2>
|
<h2 class="panel-title"><span class="fa-fw fa-download"></span> {{t 'custom_app_install'}}</h2>
|
||||||
|
@ -47,9 +41,16 @@
|
||||||
<span class="fa-warning"></span>
|
<span class="fa-warning"></span>
|
||||||
{{t 'confirm_install_custom_app'}}
|
{{t 'confirm_install_custom_app'}}
|
||||||
</p>
|
</p>
|
||||||
|
<div class="alert alert-info">
|
||||||
|
<p><span class="fa-lightbulb-o"></span>
|
||||||
|
{{t 'install_custom_app_appslists_info'}}</p>
|
||||||
|
<p>
|
||||||
|
<a href="#/apps/lists" class="btn btn-info">{{t 'appslists_manage'}}</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
<form action="#/apps/install/custom" method="POST" class="form-horizontal">
|
<form action="#/apps/install/custom" method="POST" class="form-horizontal">
|
||||||
<div class="form-group has-feedback">
|
<div class="form-group has-feedback">
|
||||||
<label for="label" class="col-sm-12">{{t 'url'}}</label>
|
<label for="url" class="col-sm-12">{{t 'url'}}</label>
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<input type="url" id="url" name="url" class="form-control" value="" placeholder="https://github.com/USER/REPOSITORY" required pattern="^https://github.com/[a-zA-Z0-9-_.]+/[a-zA-Z0-9-_.]+[/]?$">
|
<input type="url" id="url" name="url" class="form-control" value="" placeholder="https://github.com/USER/REPOSITORY" required pattern="^https://github.com/[a-zA-Z0-9-_.]+/[a-zA-Z0-9-_.]+[/]?$">
|
||||||
<p class="text-warning">
|
<p class="text-warning">
|
||||||
|
@ -65,5 +66,3 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{/installed_apps}}
|
|
||||||
|
|
|
@ -11,10 +11,6 @@
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
<div class="alert alert-warning">{{t 'backup_experimental_warning'}}</div>
|
|
||||||
|
|
||||||
<div class="separator"></div>
|
|
||||||
|
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
{{#each storages}}
|
{{#each storages}}
|
||||||
<a href="#/backup/{{id}}" class="list-group-item slide clearfix">
|
<a href="#/backup/{{id}}" class="list-group-item slide clearfix">
|
||||||
|
|
|
@ -7,10 +7,6 @@
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
<div class="alert alert-warning">{{t 'backup_experimental_warning'}}</div>
|
|
||||||
|
|
||||||
<div class="separator"></div>
|
|
||||||
|
|
||||||
<form action="#/backup/{{storage.id}}" method="POST" class="form-horizontal">
|
<form action="#/backup/{{storage.id}}" method="POST" class="form-horizontal">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
|
@ -19,7 +15,7 @@
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
{{#each hooks}}
|
{{#each hooks}}
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<input type="checkbox" id="{{@key}}" name="hooks" value="{{value}}" checked class="nice-checkbox">
|
<input type="checkbox" id="{{@key}}" name="system_parts" value="{{value}}" checked class="nice-checkbox">
|
||||||
<label for="{{@key}}" class="pull-right"><span class="sr-only">{{t 'check'}}</span></label>
|
<label for="{{@key}}" class="pull-right"><span class="sr-only">{{t 'check'}}</span></label>
|
||||||
<h2 class="list-group-item-heading">{{name}}</h2>
|
<h2 class="list-group-item-heading">{{name}}</h2>
|
||||||
<p class="list-group-item-text">{{description}}</p>
|
<p class="list-group-item-text">{{description}}</p>
|
||||||
|
|
|
@ -7,10 +7,6 @@
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
<div class="alert alert-warning">{{t 'backup_experimental_warning'}}</div>
|
|
||||||
|
|
||||||
<div class="separator"></div>
|
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h2 class="panel-title"><span class="fa-fw fa-info-circle"></span> {{t 'infos'}}</h2>
|
<h2 class="panel-title"><span class="fa-fw fa-info-circle"></span> {{t 'infos'}}</h2>
|
||||||
|
@ -33,9 +29,9 @@
|
||||||
</div>
|
</div>
|
||||||
{{#if items}}
|
{{#if items}}
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
{{#each hooks}}
|
{{#each system_parts}}
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<input type="checkbox" id="{{@key}}" name="hooks" value="{{value}}" checked class="nice-checkbox">
|
<input type="checkbox" id="{{@key}}" name="system_parts" value="{{value}}" checked class="nice-checkbox">
|
||||||
<label for="{{@key}}" class="pull-right"><span class="sr-only">{{t 'check'}}</span></label>
|
<label for="{{@key}}" class="pull-right"><span class="sr-only">{{t 'check'}}</span></label>
|
||||||
<h2 class="list-group-item-heading">{{name}}</h2>
|
<h2 class="list-group-item-heading">{{name}}</h2>
|
||||||
<p class="list-group-item-text">{{description}}</p>
|
<p class="list-group-item-text">{{description}}</p>
|
||||||
|
@ -43,9 +39,9 @@
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{#each apps}}
|
{{#each apps}}
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<input type="checkbox" id="{{id}}" name="apps" value="{{id}}" checked class="nice-checkbox">
|
<input type="checkbox" id="{{@key}}" name="apps" value="{{@key}}" checked class="nice-checkbox">
|
||||||
<label for="{{id}}" class="pull-right"><span class="sr-only">{{t 'check'}}</span></label>
|
<label for="{{@key}}" class="pull-right"><span class="sr-only">{{t 'check'}}</span></label>
|
||||||
<h2 class="list-group-item-heading">{{name}} <small>{{id}}</small></h2>
|
<h2 class="list-group-item-heading">{{name}} <small>{{@key}}</small></h2>
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
<div class="list-group-item clearfix">
|
<div class="list-group-item clearfix">
|
||||||
|
|
|
@ -12,10 +12,6 @@
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
<div class="alert alert-warning">{{t 'backup_experimental_warning'}}</div>
|
|
||||||
|
|
||||||
<div class="separator"></div>
|
|
||||||
|
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
{{#each archives}}
|
{{#each archives}}
|
||||||
<a href="#/backup/{{../storage.id}}/{{name}}" class="list-group-item slide clearfix">
|
<a href="#/backup/{{../storage.id}}/{{name}}" class="list-group-item slide clearfix">
|
||||||
|
|
84
src/views/domain/domain_cert.ms
Normal file
84
src/views/domain/domain_cert.ms
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/domains">{{t 'domains'}}</a>
|
||||||
|
<a href="#/domains/{{name}}">{{name}}</a>
|
||||||
|
<a href="#/domains/{{name}}/cert-management">{{t 'certificate'}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title">
|
||||||
|
<span class="fa-fw fa-lock"></span> {{t 'certificate_status'}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="alert alert-{{status.alert_type}}">
|
||||||
|
<span class="fa-fw fa-{{status.alert_icon}}"></span> {{status.alert_message}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>{{t 'certificate_authority'}}</dt>
|
||||||
|
<dd>{{status.CA_type}} ({{status.CA_name}})</dd>
|
||||||
|
<dt>{{t 'validity'}}</dt>
|
||||||
|
<dd>{{status.validity}} days</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title">
|
||||||
|
<span class="fa-fw fa-wrench"></span> {{t 'operations'}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
{{#if actions_enabled.install_letsencrypt}}
|
||||||
|
<div class="container">
|
||||||
|
{{#if status.ACME_eligible}}
|
||||||
|
<p><span class="fa-fw fa-check"></span>
|
||||||
|
{{t 'domain_is_eligible_for_ACME'}}</p>
|
||||||
|
{{else}}
|
||||||
|
<p><span class="fa-fw fa-meh-o"></span>
|
||||||
|
{{t 'domain_not_eligible_for_ACME'}}</p>
|
||||||
|
{{/if}}
|
||||||
|
<a href="#/domains/{{name}}/cert-install-LE" class="btn btn-success {{#unless status.ACME_eligible}}disabled{{/unless}}">
|
||||||
|
<span class="fa-star"></span> {{t 'install_letsencrypt_cert'}}
|
||||||
|
</a>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if actions_enabled.manual_renew_letsencrpt}}
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'manually_renew_letsencrypt_message'}}</p>
|
||||||
|
<a href="#/domains/{{name}}/cert-renew-letsencrypt" class="btn btn-warning">
|
||||||
|
<span class="fa-refresh"></span> {{t 'manually_renew_letsencrypt'}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if actions_enabled.regen_selfsigned}}
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'regenerate_selfsigned_cert_message'}}</p>
|
||||||
|
<a href="#/domains/{{name}}/cert-regen-selfsigned" class="btn btn-warning">
|
||||||
|
<span class="fa-refresh"></span> {{t 'regenerate_selfsigned_cert'}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
{{/if}}
|
||||||
|
{{#if actions_enabled.replace_with_selfsigned}}
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'revert_to_selfsigned_cert_message'}}</p>
|
||||||
|
<a href="#/domains/{{name}}/cert-replace-with-selfsigned" class="btn btn-danger">
|
||||||
|
<span class="fa-exclamation-triangle"></span> {{t 'revert_to_selfsigned_cert'}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,12 @@
|
||||||
<a href="#/domains/{{name}}">{{name}}</a>
|
<a href="#/domains/{{name}}">{{name}}</a>
|
||||||
<a href="#/domains/{{name}}/dns">{{t 'dns'}}</a>
|
<a href="#/domains/{{name}}/dns">{{t 'dns'}}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<span class="fa-fw fa-warning"></span> {{t 'domain_dns_conf_is_just_a_recommendation' }}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h2 class="panel-title">
|
<h2 class="panel-title">
|
||||||
|
|
|
@ -52,7 +52,19 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<p>{{t 'domain_dns_longdesc'}}</p>
|
<p>{{t 'domain_dns_longdesc'}}</p>
|
||||||
<a href="#/domains/{{name}}/dns" class="btn btn-default slide">
|
<a href="#/domains/{{name}}/dns" class="btn btn-default slide">
|
||||||
<span class="fa-fw fa-globe"></span> {{t 'domain_dns_config'}}
|
{{t 'domain_dns_config'}} <span class="fa-fw fa-globe"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="container">
|
||||||
|
<p>{{t 'certificate_manage'}}</p>
|
||||||
|
{{#unless enable_cert_management}}
|
||||||
|
<p><span class="fa-fw fa-exclamation-circle"></span>
|
||||||
|
{{t 'certificate_old_letsencrypt_app_conflict'}}
|
||||||
|
</p>
|
||||||
|
{{/unless}}
|
||||||
|
<a href="#/domains/{{name}}/cert-management" class="btn btn-default slide {{#unless enable_cert_management}}disabled{{/unless}}">
|
||||||
|
{{t 'ssl_certificate'}} <span class="fa-fw fa-lock"></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
|
@ -9,7 +9,24 @@
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h2 class="panel-title"><span class="fa-fw fa-info-circle"></span> {{t 'status'}}</h2>
|
<h2 class="panel-title"><span class="fa-fw fa-info-circle"></span> {{t 'infos'}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
{{#service}}
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>{{t 'name'}}</dt>
|
||||||
|
<dd>{{name}}</dd>
|
||||||
|
<dt>{{t 'description'}}</dt>
|
||||||
|
<dd>{{description}}</dd>
|
||||||
|
</dl>
|
||||||
|
{{/service}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-wrench"></span> {{t 'status'}}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
|
@ -22,8 +39,11 @@
|
||||||
<br>
|
<br>
|
||||||
{{t 'service_status'}}
|
{{t 'service_status'}}
|
||||||
<span class="text-{{#is_running}}success{{/is_running}}{{^is_running}}danger{{/is_running}}">
|
<span class="text-{{#is_running}}success{{/is_running}}{{^is_running}}danger{{/is_running}}">
|
||||||
{{status}}
|
{{active}}
|
||||||
</span>
|
</span>
|
||||||
|
<br>
|
||||||
|
{{t 'started_at'}}
|
||||||
|
{{active_at.human}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
|
|
|
@ -9,12 +9,15 @@
|
||||||
{{#services}}
|
{{#services}}
|
||||||
<a href="#/services/{{name}}" class="list-group-item slide service-{{name}}">
|
<a href="#/services/{{name}}" class="list-group-item slide service-{{name}}">
|
||||||
<span class="fa-chevron-right pull-right"></span>
|
<span class="fa-chevron-right pull-right"></span>
|
||||||
<h2 class="list-group-item-heading">{{name}}</h2>
|
<h2 class="list-group-item-heading">{{name}} <small>{{description}}</small></h2>
|
||||||
<div class="list-group-item-text">
|
<div class="list-group-item-text">
|
||||||
{{t 'service_status'}}
|
{{t 'service_status'}}
|
||||||
<span class="text-{{#is_running}}success{{/is_running}}{{^is_running}}danger{{/is_running}}">
|
<span class="text-{{#is_running}}success{{/is_running}}{{^is_running}}danger{{/is_running}}">
|
||||||
{{status}}
|
{{active}}
|
||||||
</span>
|
</span>
|
||||||
|
<br>
|
||||||
|
{{t 'started_at'}}
|
||||||
|
{{active_at.human}}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
{{/services}}
|
{{/services}}
|
||||||
|
|
|
@ -10,9 +10,7 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
{{#logs}}
|
{{#logs}}
|
||||||
<h2>{{filename}}</h2>
|
<h2>{{filename}}</h2>
|
||||||
<pre id="log" class="service-log">
|
<pre id="log" class="service-log">{{filecontent}}</pre>
|
||||||
{{filecontent}}
|
|
||||||
</pre>
|
|
||||||
<button data-paste-content="#log"><i class="fa-cloud-upload"></i> {{t 'upload'}}</button>
|
<button data-paste-content="#log"><i class="fa-cloud-upload"></i> {{t 'upload'}}</button>
|
||||||
{{/logs}}
|
{{/logs}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
<span class="pull-right fa-chevron-right"></span>
|
<span class="pull-right fa-chevron-right"></span>
|
||||||
<h2 class="list-group-item-heading">{{t 'logs'}}</h2>
|
<h2 class="list-group-item-heading">{{t 'logs'}}</h2>
|
||||||
</a>
|
</a>
|
||||||
|
<a href="#/tools/migrations" class="list-group-item slide clearfix">
|
||||||
|
<span class="pull-right fa-chevron-right"></span>
|
||||||
|
<h2 class="list-group-item-heading">{{t 'migrations'}}</h2>
|
||||||
|
</a>
|
||||||
<a href="#/tools/monitor" class="list-group-item slide clearfix">
|
<a href="#/tools/monitor" class="list-group-item slide clearfix">
|
||||||
<span class="pull-right fa-chevron-right"></span>
|
<span class="pull-right fa-chevron-right"></span>
|
||||||
<h2 class="list-group-item-heading">{{t 'monitoring'}}</h2>
|
<h2 class="list-group-item-heading">{{t 'monitoring'}}</h2>
|
||||||
|
@ -35,6 +39,10 @@
|
||||||
<span class="fa-chevron-right pull-right"></span>
|
<span class="fa-chevron-right pull-right"></span>
|
||||||
<h2 class="list-group-item-heading">{{t 'tools_security_feed'}}</h2>
|
<h2 class="list-group-item-heading">{{t 'tools_security_feed'}}</h2>
|
||||||
</a>
|
</a>
|
||||||
|
<a href="#/tools/reboot" class="list-group-item slide clearfix">
|
||||||
|
<span class="pull-right fa-chevron-right"></span>
|
||||||
|
<h2 class="list-group-item-heading">{{t 'tools_shutdown_reboot'}}</h2>
|
||||||
|
</a>
|
||||||
<a href="#/tools/versions" class="list-group-item slide clearfix">
|
<a href="#/tools/versions" class="list-group-item slide clearfix">
|
||||||
<span class="pull-right fa-chevron-right"></span>
|
<span class="pull-right fa-chevron-right"></span>
|
||||||
<h2 class="list-group-item-heading">{{t 'versions'}}</h2>
|
<h2 class="list-group-item-heading">{{t 'versions'}}</h2>
|
||||||
|
|
81
src/views/tools/tools_migrations.ms
Normal file
81
src/views/tools/tools_migrations.ms
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/tools">{{t 'tools'}}</a>
|
||||||
|
<a href="#/tools/migrations">{{t 'migrations'}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-cogs"></span> {{t 'migrations_pending'}}
|
||||||
|
{{#if pending_migrations}}
|
||||||
|
<div class="btn-toolbar pull-right">
|
||||||
|
<a href="#/tools/migrations/run" class="btn btn-success" style="margin-top: -3px"><span class="fa-fw fa-play"></span> {{t 'run'}}</a>
|
||||||
|
<a href="#/tools/migrations/skip" class="btn btn-warning" style="margin-top: -3px"><span class="fa-fw fa-close"></span> {{t 'skip'}}</a>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{#if pending_migrations}}
|
||||||
|
<div class="list-group">
|
||||||
|
{{#pending_migrations}}
|
||||||
|
<div class="list-group-item clearfix">
|
||||||
|
<h3 class="list-group-item-heading" style="text-transform: capitalize;">
|
||||||
|
{{ number }}. {{ name }}
|
||||||
|
</h3>
|
||||||
|
<p id="description-migration-{{number}}" class="list-group-item-text">
|
||||||
|
{{ description }}
|
||||||
|
</p>
|
||||||
|
{{#if disclaimer }}
|
||||||
|
<hr>
|
||||||
|
<p id="disclaimer-migration-{{number}}" class="list-group-item-text">
|
||||||
|
{{{ disclaimer }}}
|
||||||
|
<div style="margin-left:20px">
|
||||||
|
<label style="" id="disclaimer-ack-migration-{{number}}" class="checkbox disclaimer-ack">
|
||||||
|
<input type="checkbox"> I read and understood this disclaimer
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
{{/pending_migrations}}
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="panel-body">
|
||||||
|
<span class="text-success"><span class="fa-fw fa-check-circle"></span>{{t 'migrations_no_pending' }}</span>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title"><span class="fa-fw fa-cogs"></span> {{t 'migrations_done'}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{#if done_migrations}}
|
||||||
|
<div class="list-group">
|
||||||
|
{{#done_migrations}}
|
||||||
|
<div class="list-group-item clearfix">
|
||||||
|
<h3 class="list-group-item-heading" style="text-transform: capitalize;">
|
||||||
|
<a data-toggle="collapse" href="#description-migration-{{number}}">
|
||||||
|
{{ number }}. {{ name }}
|
||||||
|
</a>
|
||||||
|
</h3>
|
||||||
|
<p id="description-migration-{{number}}" class="list-group-item-text collapse">
|
||||||
|
{{ description }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{{/done_migrations}}
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="panel-body">
|
||||||
|
<span class="text-info">{{t 'migrations_no_done' }}</span>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
{{#each versions}}
|
{{#each versions}}
|
||||||
<dt>{{@key}}</dt>
|
<dt>{{@key}}</dt>
|
||||||
<dd>{{.}}</dd>
|
<dd>{{version}} ({{repo}})</dd>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
28
src/views/tools/tools_reboot.ms
Normal file
28
src/views/tools/tools_reboot.ms
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<div class="btn-breadcrumb">
|
||||||
|
<a href="#/" ><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
|
||||||
|
<a href="#/tools">{{t 'tools'}}</a>
|
||||||
|
<a href="#/tools/reboot">{{t 'tools_shutdown_reboot'}}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title">
|
||||||
|
<span class="fa-fw fa-wrench"></span> {{t 'operations'}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<p>
|
||||||
|
<a href="#/tools/reboot/reboot" class="btn btn-danger">
|
||||||
|
<i class="fa-refresh"></i> {{t 'tools_reboot_btn'}}
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="#/tools/reboot/shutdown" class="btn btn-danger">
|
||||||
|
<i class="fa-power-off"></i> {{t 'tools_shutdown_btn'}}
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -14,7 +14,7 @@
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
{{#each versions}}
|
{{#each versions}}
|
||||||
<dt>{{@key}}</dt>
|
<dt>{{@key}}</dt>
|
||||||
<dd>{{.}}</dd>
|
<dd>{{version}} ({{repo}})</dd>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</dl>
|
</dl>
|
||||||
<a href="#/update" class="btn btn-success pull-right">{{t 'system_update'}}</a>
|
<a href="#/update" class="btn btn-success pull-right">{{t 'system_update'}}</a>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
{{/packages}}
|
{{/packages}}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
<div class="panel-footer">
|
||||||
<a href="#/upgrade/packages" class="btn btn-success">{{t 'system_upgrade_btn'}}</a>
|
<a href="#/upgrade/packages" class="btn btn-success">{{t 'system_upgrade_all_packages_btn'}}</a>
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
@ -42,13 +42,14 @@
|
||||||
{{#if apps}}
|
{{#if apps}}
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
{{#apps}}
|
{{#apps}}
|
||||||
<div class="list-group-item">
|
<div class="list-group-item clearfix">
|
||||||
|
<a href="#/upgrade/apps/{{id}}" class="btn btn-success pull-right">{{t 'system_upgrade_btn'}}</a>
|
||||||
<h3 class="list-group-item-heading">{{label}} <small>{{id}}</small></h3>
|
<h3 class="list-group-item-heading">{{label}} <small>{{id}}</small></h3>
|
||||||
</div>
|
</div>
|
||||||
{{/apps}}
|
{{/apps}}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
<div class="panel-footer">
|
||||||
<a href="#/upgrade/apps" class="btn btn-success">{{t 'system_upgrade_btn'}}</a>
|
<a href="#/upgrade/apps" class="btn btn-success">{{t 'system_upgrade_all_applications_btn'}}</a>
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
|
@ -35,12 +35,13 @@
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>{{t 'user_mailbox_quota'}}</strong></td>
|
<td><strong>{{t 'user_mailbox_quota'}}</strong></td>
|
||||||
{{#if mailbox-quota.use}}
|
<td>{{mailbox-quota.limit}}</td>
|
||||||
<td>{{mailbox-quota.use}} / {{mailbox-quota.limit}}</td>
|
</tr>
|
||||||
{{else}}
|
|
||||||
<td>{{mailbox-quota}}</td>
|
<tr>
|
||||||
{{/if}}
|
<td><strong>{{t 'user_mailbox_use'}}</strong></td>
|
||||||
</tr
|
<td>{{mailbox-quota.use}}</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>{{t 'user_emailaliases'}}</strong></td>
|
<td><strong>{{t 'user_emailaliases'}}</strong></td>
|
||||||
|
|
Loading…
Reference in a new issue