Merge branch 'stretch-unstable' into burn-applists

This commit is contained in:
Alexandre Aubin 2019-11-01 15:27:58 +01:00 committed by GitHub
commit 050950d80b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 1298 additions and 340 deletions

View file

@ -2,11 +2,11 @@
[YunoHost](https://yunohost.org) administration web interface (JS client for the API).
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).
This client is a part of the YunoHost project, and can not be installed directly. Please visit the YunoHost website for [installation instructions](https://yunohost.org/install).
## Bug tracker
Please report issues on the [YunoHost Bugtracker](https://github.com/YunoHost/issues).
Please report issues on the [YunoHost bugtracker](https://github.com/YunoHost/issues).
## Translate
@ -14,9 +14,9 @@ Please report issues on the [YunoHost Bugtracker](https://github.com/YunoHost/is
## Contributing
Feel free to improve the plugin and send us a pull request.
Feel free to improve the plugin and send a pull request.
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:
`gulp` is used to compile Less files and minify the JavaScript. Assuming [nodejs](http://nodejs.org/) is installed, you can install dependencies and run a build with:
```sh
cd src
@ -24,12 +24,12 @@ npm install
npm run build
```
Alternatively you can run `npm run build-dev` which improves building speed by bypassing compression tasks.
Alternatively you can run `npm run build-dev`, which improves building speed by bypassing compression tasks.
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
reach them manually some times you modify them. (e.g. go to
reach them manually, and sometimes you modify them. (e.g. go to
https://example.com/yunohost/admin/views/domain/domain_list.ms)
## Dependencies
@ -38,4 +38,4 @@ https://example.com/yunohost/admin/views/domain/domain_list.ms)
* Font-Awesome 4.5.0
* Handlebars 1.3.0
* Sammy 0.7.6
* Jquery-Cookie 2.1.0
* JS-cookie 2.1.0

12
debian/changelog vendored
View file

@ -1,3 +1,15 @@
yunohost-admin (3.7.0) testing; urgency=low
- [enh] Add UI for groups and permissions (YunoHost-admin#257)
- [mod] Rework migration system to have independent migrations (YunoHost-admin#258)
- [enh] Quite a lot of messages improvements, string cleaning, language rework... (YunoHost-admin/10ea04a, YunoHost-admin#265)
- [i18n] Improved translations for Catalan, Occitan, French, Esperanto, Arabic, German, Spanish, Norwegian Bokmål, Portuguese
- [fix] Inline buttons responsiveness on migration screen (YunoHost-admin#259)
Thanks to all contributors <3 ! (accross all repo: Yunohost, Moulinette, SSOwat, Yunohost-admin) : advocatux, Aksel K., Aleks, Allan N., amirale qt, Armin P., Bram, ButterflyOfFire, Carles S. A., chema o. r., decentral1se, Emmanuel V., Etienne M., Filip B., Geoff M., htsr, Jibec, Josué, Julien J., Kayou, liberodark, ljf, lucaskev, Lukas D., madtibo, Martin D., Mélanie C., nr 458 h, pitfd, ppr, Quentí, sidddy, troll, tufek yamero, xaloc33, yalh76
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 31 Oct 2019 19:00:00 +0000
yunohost-admin (3.6.5) stable; urgency=low
- [fix] Stupid / buggy error handling for postinstall (2187657)

View file

@ -5,7 +5,7 @@
"private": true,
"dependencies": {
"bootstrap": "3.3.6",
"font-awesome": "4.5.0",
"fork-awesome": "1.1.7",
"handlebars-helper-intl": "1.1.2",
"handlebars": "4.0.11",
"sammy": "0.7.6",

View file

@ -25,7 +25,7 @@
/*
* FontAwesome
*/
@import "../bower_components/font-awesome/less/font-awesome.less";
@import "../bower_components/fork-awesome/less/fork-awesome.less";
// Fixes
@ -101,6 +101,10 @@ button {
color: transparent;
}
.label {
border-radius: 1px;
}
/*
* The top heading of the doc
*
@ -221,15 +225,15 @@ button {
* Page footer
*
*/
.page-footer {
#page-footer {
.clearfix;
.make-row(12);
margin: 20px 0;
padding-top: 20px;
margin-top: 40px;
border-top: 1px solid #eee;
color: #999;
font-size: 0.9em;
text-align: right;
a {
color: #666;
&:hover,
@ -237,6 +241,41 @@ button {
}
}
#page-footer-links {
text-align: left;
float: left;
a {
display: inline-block;
}
a::before {
content: "•";
display: inline-block;
vertical-align: top;
padding: 0 0.5em 0 0.25em;
}
a:first-child:before {content: none;}
}
#yunohost-version {
text-align: right;
float: right;
}
@media screen and (max-width: @screen-xs-min) {
#yunohost-version {
text-align: center;
float: none;
}
#page-footer-links {
text-align: center;
float: none;
}
}
/*
* The pop up dialog
*
@ -558,6 +597,10 @@ input[type='radio'].nice-radio {
border-radius: 5px;
}
.messages div:not(:first-child) .progress {
display: none;
}
.messages .progress-bar-striped {
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 75%, transparent 75%, transparent);
}
@ -659,6 +702,62 @@ input[type='radio'].nice-radio {
}
/** Groups View **/
#view-groups {
.panel-heading a {
text-decoration: none;
&.group-delete {
float:right;
color:lighten(@label-danger-bg, 20%);
:hover {
color:@label-danger-bg;
}
}
}
.panel-body {
h3 {
margin-top:0;
}
button.dropdown-toggle {
line-height: 15.666px;
top: -1.666px;
}
.dropdown-menu {
max-height: 200px;
overflow-y: auto;
}
.label-removable {
// The following match properties from regular btn's
display:inline-block;
font-size:14px;
color:#333;
background-color:#f8f8f8;
border: #ccc 1px solid;
font-weight: normal;
margin-bottom:0;
position: relative;
top: -1.666px;
height: 29.666px;
vertical-align: middle;
padding: 6px 12px;
margin-right:7px; // Spacing between labels
> a {
margin-left:6px;
padding-left:6px;
border-left: #ccc 1px solid;
color:lighten(@label-info-bg,20);
text-decoration: none;
}
> a:hover {
color:@label-info-bg;
}
}
}
}
/** Flash messages **/
#flashMessage {
max-height: 120px;

View file

@ -71,7 +71,7 @@ gulp.task('js-lint', function() {
// Fonts
gulp.task('fonts', function() {
return gulp.src([
'bower_components/font-awesome/fonts/*',
'bower_components/fork-awesome/fonts/*',
'bower_components/source-code-pro/EOT/*.eot',
'bower_components/source-code-pro/OTF/*.otf',
'bower_components/source-code-pro/TTF/*.ttf',

View file

@ -60,8 +60,13 @@
</div><!--/#slider-container-->
<footer class="page-footer">
<p id="yunohost-version"></p>
<footer id="page-footer">
<div id="page-footer-links">
<a href="https://yunohost.org/docs" target="_blank"><i class="fa-book"></i> Documentation</a>
<a href="https://yunohost.org/help" target="_blank"><i class="fa-life-ring"></i> Need help?</a>
<a href="https://donate.yunohost.org/" target="_blank"><i class="fa-heart"></i> Donate</a>
</div>
<div id="yunohost-version"></div>
</footer>
</div>

View file

@ -202,20 +202,23 @@
// Get app information
app.get('#/apps/:app', function (c) {
c.api('/apps/'+c.params['app']+'?raw', function(data) { // http://api.yunohost.org/#!/app/app_info_get_9
// Presentation
data.settings.allowed_users = (data.settings.allowed_users) ? data.settings.allowed_users.replace(',', ', ')+"." : y18n.t('everyone_has_access');
c.api('/users/permissions', function(data_permissions) {
// Multilingual description
data.description = (typeof data.manifest.description[y18n.locale] !== 'undefined') ?
data.manifest.description[y18n.locale] :
data.manifest.description['en']
;
// Permissions
data.permissions = data_permissions.permissions[c.params['app']+".main"]["allowed"];
// Multi Instance settings
data.manifest.multi_instance = data.manifest.multi_instance ? y18n.t('yes') : y18n.t('no');
data.install_time = new Date(data.settings.install_time * 1000);
// Multilingual description
data.description = (typeof data.manifest.description[y18n.locale] !== 'undefined') ?
data.manifest.description[y18n.locale] :
data.manifest.description['en']
;
c.view('app/app_info', data);
// Multi Instance settings
data.manifest.multi_instance = data.manifest.multi_instance ? y18n.t('yes') : y18n.t('no');
data.install_time = new Date(data.settings.install_time * 1000);
c.view('app/app_info', data);
});
});
});
@ -619,150 +622,6 @@
);
});
// Manage app access
app.get('#/apps/:app/access', function (c) {
c.api('/apps/'+c.params['app']+'?raw', function(data) { // http://api.yunohost.org/#!/app/app_info_get_9
c.api('/users', function(dataUsers) {
// allowed_users as array
if (typeof data.settings.allowed_users !== 'undefined') {
if (data.settings.allowed_users.length === 0) {
// Force empty array, means no user has access
data.settings.allowed_users = [];
}
else {
data.settings.allowed_users = data.settings.allowed_users.split(',');
}
} else {
data.settings.allowed_users = []; // Force array
// if 'allowed_users' is undefined, everyone has access
// that means that undefined is different from empty array
data.settings.allow_everyone = true;
}
// Available users
data.users = [];
$.each(dataUsers.users, function(username, user){
// Do not list allowed_users in select list
if ( data.settings.allowed_users.indexOf(username) === -1 ) {
data.users.push({
value: username,
label: user.fullname+' ('+user.mail+')'
});
} else {
// Complete allowed_users data
data.settings.allowed_users[data.settings.allowed_users.indexOf(username)] = {
username: username,
fullname: user.fullname,
mail: user.mail,
};
}
});
c.view('app/app_access', data);
});
});
});
// Remove all access
app.get('#/apps/:app/access/remove', function (c) {
c.confirm(
y18n.t('applications'),
y18n.t('confirm_access_remove_all', [c.params['app']]),
function() {
var params = {
apps: c.params['app'],
users: []
};
c.api('/access?'+c.serialize(params), function(data) { // http://api.yunohost.org/#!/app/app_removeaccess_delete_12
store.clear('slide');
c.redirect('#/apps/'+ c.params['app']+ '/access');
}, 'DELETE', params);
},
function() {
store.clear('slide');
c.redirect('#/apps/'+ c.params['app']+ '/access');
}
);
});
// Remove access to a specific user
app.get('#/apps/:app/access/remove/:user', function (c) {
c.confirm(
y18n.t('applications'),
y18n.t('confirm_access_remove_user', [c.params['app'], c.params['user']]),
function() {
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
store.clear('slide');
c.redirect('#/apps/'+ c.params['app']+ '/access');
}, 'DELETE', params); // passing 'params' here is useless because jQuery doesn't handle ajax datas for DELETE requests. Passing parameters through uri.
},
function() {
store.clear('slide');
c.redirect('#/apps/'+ c.params['app']+ '/access');
}
);
});
// Grant all access
app.get('#/apps/:app/access/add', function (c) {
c.confirm(
y18n.t('applications'),
y18n.t('confirm_access_add', [c.params['app']]),
function() {
var params = {
apps: c.params['app'],
users: null
};
c.api('/access', function() { // http://api.yunohost.org/#!/app/app_addaccess_put_13
store.clear('slide');
c.redirect('#/apps/'+ c.params['app'] +'/access');
}, 'PUT', params);
},
function() {
store.clear('slide');
c.redirect('#/apps/'+ c.params['app']+ '/access');
}
);
});
// Grant access for a specific user
app.post('#/apps/:app/access/add', function (c) {
var params = {
users: c.params['user'],
apps: c.params['app']
};
c.api('/access', function() { // http://api.yunohost.org/#!/app/app_addaccess_put_13
store.clear('slide');
c.redirect('#/apps/'+ c.params['app'] +'/access');
}, 'PUT', params);
});
// Clear access (reset)
app.get('#/apps/:app/access/clear', function (c) {
c.confirm(
y18n.t('applications'),
y18n.t('confirm_access_clear', [c.params['app']]),
function() {
var params = {
apps: c.params['app']
};
c.api('/access', function() { //
store.clear('slide');
c.redirect('#/apps/'+ c.params['app'] +'/access');
}, 'POST', params);
},
function() {
store.clear('slide');
c.redirect('#/apps/'+ c.params['app']+ '/access');
}
);
});
// Make app default
app.get('#/apps/:app/default', function (c) {
c.confirm(

View file

@ -5,6 +5,196 @@
var PASSWORD_MIN_LENGTH = 4;
// A small utility to convert a string to title case
// e.g. "hAvE a NicE dAy" --> "Have A Nice Day"
// Savagely stolen from https://stackoverflow.com/a/196991
function toTitleCase(str) {
return str.replace(
/\w\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
}
/**
* Groups and permissions
*
*/
/**
* Update group or permissions
*
* @model data organize in the same way than /users/groups?full&include_primary_groups
* @params.operation "add"|"remove"
* @params.type "members"|"permissions"
* @param.item Name of the user or the permission to add or remove
* @param.group Name of the group affected
*
* This function is built to be apply with params generated by the use of
* HTML dataset attributes (e.g. link in the partial inline view "label" in group_list.ms)
*
* @return void
**/
function updateGroup(model, params) {
var type = params.type;
var operation = params.operation;
var item = params.item;
var groupname = params.group;
var group = data.groups[groupname];
var to = (operation == 'add')?group[type]:group[type + 'Inv'];
var from = (operation == 'add')?group[type+'Inv']:group[type];
// Do nothing, if array of destination already contains the item
if (from.indexOf(item) === -1) return;
// Hack to disable pacman loader if any
if ($('div.loader').length === 0) {
$('#main').append('<div class="loader loader-content" style="display: none"></div>');
}
$('div.loader').css('display', 'none');
// Update group
var params = {}; var url;
if (type == 'members') {
url = '/users/groups/' + groupname;
params[operation] = [item];
}
else {
url = '/users/permissions/' + item;
params[operation] = [groupname];
}
c.api(url, function(data_update) {
to.push(item);
from.splice(from.indexOf(item), 1);
updateView(data);
}, 'PUT', params);
}
/**
* Update the view with the new model
*
* @model data organize in the same way than /users/groups?full&include_primary_groups
*
* @return void
**/
function updateView(model) {
// Sort in aphanumerical order to improve user experience
for (var group in model.groups) {
model.groups[group].permissions.sort();
model.groups[group].permissionsInv.sort();
model.groups[group].members.sort();
model.groups[group].membersInv.sort();
}
// Manual render, we don't use c.view to avoid scrollTop and other
// uneeded behaviour
var rendered = c.render('views/user/group_list.ms', model);
rendered.swap(function () {
// Add click event to get a nice "reactive" interface
jQuery(".group-update").on('click', function (e) {
updateGroup(model, jQuery(this)[0].dataset);
return false;
});
jQuery(".group-add-user").on('click', function (e) {
data.groups[$(this)[0].dataset.user].display = true;
updateView(data);
return false;
});
});
}
app.get('#/groups', function (c) {
c.api('/users/groups?full&include_primary_groups', function(data_groups) {
c.api('/users', function(data_users) {
c.api('/users/permissions?short', function(data_permissions) {
//var perms = data_permissions.permissions;
var specific_perms = {};
var all_perms = data_permissions.permissions;
var users = Object.keys(data_users.users);
// Enrich groups data with primary group indicator and inversed items list
for (var group in data_groups.groups) {
data_groups.groups[group].primary = users.indexOf(group) !== -1;
data_groups.groups[group].permissionsInv = all_perms.filter(function(item) {
return data_groups.groups[group].permissions.indexOf(item) === -1;
}).filter(function(item) {
return group != "visitors" || (item != "mail.main" && item != "xmpp.main"); // Remove 'email' and 'xmpp' in visitors's permission choice list
});
data_groups.groups[group].membersInv = users.filter(function(item) {
return data_groups.groups[group].members.indexOf(item) === -1;
});
}
// Declare all_users and visitors has special
data_groups.groups['all_users'].special = true;
data_groups.groups['visitors'].special = true;
// Data given to the view with 2 functions to convert technical
// permission id to display names
data = {
'groups':data_groups.groups,
'displayPermission': function (text) {
// Display a permission correctly for a human
text = text.replace('.main', '');
if (text.indexOf('.') > -1)
text = text.replace('.', ' (') + ')';
if (text == "mail")
text = "E-mail";
else if (text == "xmpp")
text = "XMPP";
else
text = toTitleCase(text);
return text;
},
'displayUser': function (text) {
return text;
},
};
updateView(data);
});
});
});
});
// Create a new group
app.get('#/groups/create', function (c) {
c.view('user/group_create', {});
});
app.post('#/groups/create', function (c) {
c.params['groupname'] = c.params['groupname'].replace(' ', '_').toLowerCase();
c.api('/users/groups', function(data) {
c.redirect('#/groups');
}, 'POST', c.params.toHash());
});
app.get('#/groups/:group/delete', function (c) {
var params = {};
// make confirm content
var confirmModalContent = $('<div>'+ y18n.t('confirm_delete', [c.params['group']]) +'</div>');
// display confirm modal
c.confirm(
y18n.t('groups'),
confirmModalContent,
function(){
c.api('/users/groups/'+ c.params['group'], function(data) {
c.redirect('#/groups');
}, 'DELETE', params);
},
function(){
//store.clear('slide');
c.redirect('#/groups');
}
);
});
/**
* Users
*
@ -234,5 +424,8 @@
});
});
})();

View file

@ -323,6 +323,11 @@
// Modal content
$('.content', box).html(content);
// Clear any remaining click event that could still be there (e.g.
// clicking outside the modal window doesn't equal to clicking
// cancel...
$('footer button', box).unbind( "click" );
// Handle buttons
$('footer button', box)
.click(function(e){

View file

@ -101,12 +101,43 @@
// equality stuff because mustache/Handlebars is lame
// source https://stackoverflow.com/a/31632215
Handlebars.registerHelper('eq', function(a, b) {
return a === b;
Handlebars.registerHelper({
eq: function(a, b) {
return a === b;
},
neq: function(a, b) {
return a !== b;
},
lt: function (v1, v2) {
return v1 < v2;
},
gt: function (v1, v2) {
return v1 > v2;
},
lte: function (v1, v2) {
return v1 <= v2;
},
gte: function (v1, v2) {
return v1 >= v2;
},
and: function () {
return Array.prototype.slice.call(arguments).every(function (arg) {
return (Array.isArray(arg))?arg.length !== 0:arg;
});
},
or: function () {
return Array.prototype.slice.call(arguments, 0, -1).some(function (arg) {
return (Array.isArray(arg))?arg.length !== 0:arg;
});
}
});
Handlebars.registerHelper('neq', function(a, b) {
return a !== b;
// Be able to call a function given in context
Handlebars.registerHelper('call', function () {
var args = Array.prototype.slice.call(arguments);
var func = args.shift();
args.pop();
return func.apply(null, args);
});
Handlebars.registerHelper('in', function(a) {

View file

@ -26,19 +26,19 @@
"app_info_uninstall_desc": "حذف هذا البرنامج.",
"app_install_cancel": "تم إلغاء عملية التنصيب.",
"app_install_custom_no_manifest": "No manifest.json file",
"app_list": "قائمة البرمجيات",
"app_list": "قائمة التطبيقات",
"app_make_default": "تعيينه كافتراضي",
"app_repository": "مصدر البرنامج : ",
"app_state": "حالة البرنامج : ",
"app_state_inprogress": "العمل عليه متواصل",
"app_state_inprogress": "جارٍ العمل عليه",
"app_state_notworking": "لا يعمل بعدُ",
"app_state_validated": "موافَق عليها",
"app_state_working": "يشتغل",
"application": "برنامج",
"applications": "البرمجيات",
"applications": "التطبيقات",
"archive_empty": "النسخة الإحتياطية فارغة",
"available": "متوفر",
"available_apps": "البرمجيات المتوفرة",
"available_apps": "التطبيقات المتوفرة",
"backup": "النسخ الإحتياطي",
"backup_action": "النسخ الإحتياطي",
"backup_archive_copy": "نسخ هذا الأرشيف إلى مساحة تخزين أخرى",
@ -80,7 +80,7 @@
"confirm_service_enable": "متأكد مِن أنك تريد تفعيل %s ؟",
"confirm_service_disable": "متأكد مِن أنك تريد تعطيل %s ؟",
"confirm_uninstall": "متأكد مِن أنك تريد إلغاء تنصيب %s ؟",
"confirm_update_apps": "متأكد مِن أنك تريد تحديث كافة البرمجيات ؟",
"confirm_update_apps": "متأكد مِن أنك تريد تحديث كافة التطبيقات؟",
"confirm_update_packages": "متأكد مِن أنك تريد تحديث كافة الحُزم ؟",
"confirm_update_specific_app": "متأكد مِن أنك تود تحديث %s ؟",
"confirm_upnp_enable": "متأكد مِن أنك تريد تفعيل الـ UPnP ؟",
@ -130,7 +130,7 @@
"enabled": "مُفَعَّل",
"error_modify_something": "يجب عليك تغيير شيء ما",
"error_occured": "طرأ هناك خطأ، يرجى إعادة المحاولة",
"error_retrieve_feed": "تعذر جلب خيط الأخبار : %s",
"error_retrieve_feed": "تعذر جلب خيط الأخبار: %s. مِن المحتمل أنك قد تستخدم إضافة تمنع متصفحك مِن تنفيذ هذا الطلب (أو أنّ موقع الويب لا يعمل).",
"error_select_domain": "يجب اختيار نطاق",
"error_server": "خطأ في الخادم",
"error_server_unexpected": "طرأ هناك خطأ غير متوقع في الخادم (%s)",
@ -143,20 +143,20 @@
"fs_type": "نوع نظام الملفات",
"gateway": "بوابة العبور : ",
"home": "الرئيسية",
"hook_adminjs_group_configuration": "الإعداد",
"hook_conf_cron": "المهام العادية",
"hook_conf_ldap": "LDAP",
"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_certs": "شهادات الأمان SSL",
"hook_conf_ynh_firewall": "الجدار الناري",
"hook_conf_ynh_mysql": "كلمة سر قاعدة البيانات MySQL",
"hook_conf_ynh_mysql": "كلمة سر MySQL",
"hook_data_home": "بيانات المستخدم",
"hook_data_home_desc": "بيانات المستخدم في /home/USER",
"hook_data_mail": "البريد",
"hook_data_mail_desc": "البريد المتواجد على السيرفر",
"hook_data_mail_desc": "الرسائل الإلكترونية الخامة المحفوظة على السيرفر",
"hostname": "إسم المضيف",
"id": "ID",
"inactive": "معطّل",
@ -166,7 +166,7 @@
"install_time": "تاريخ التنصيب",
"installation_complete": "إكتملت عملية التنصيب",
"installed": "مُنصّب",
"installed_apps": "البرمجيات المنصبة",
"installed_apps": "التطبيقات المنصّبة",
"installing": "جارٍ التنصيب",
"interface": "الواجهة",
"internal_exception": "",
@ -185,7 +185,7 @@
"logout": "الخروج",
"mailbox_quota_description": "على سبيل المثال, 700M هو حجم CD، و 4700M هو حجم DVD.",
"mailbox_quota_placeholder": "قصد التعطيل أتركه فارغا أو قم بإدخال 0.",
"manage_apps": "إدارة البرمجيات",
"manage_apps": "إدارة التطبيقات",
"manage_domains": "إدراة أسماء النطاقات",
"manage_users": "إدارة المستخدمين",
"memory": "الذاكرة",
@ -256,7 +256,7 @@
"storages_no": "لا توجد أية مساحة تخزين.",
"swap": "Swap",
"system": "النظام",
"system_apps": "البرمجيات",
"system_apps": "التطبيقات",
"system_apps_nothing": "لا يوجد هناك أي برنامج بحاجة إلى تحديث.",
"system_delayed_upgrade": "ترقية أو تحديث مؤجل",
"system_delayed_upgrade_warning": "سوف يُحدَّث <b>%s</b> تلقائيا خلال الساعة القادمة.",
@ -265,7 +265,7 @@
"system_update": "تحديث النظام",
"system_upgrade": "تحديث النظام",
"system_upgrade_btn": "ترقية",
"system_upgrade_all_applications_btn": "تحديث كافة البرمجيات",
"system_upgrade_all_applications_btn": "تحديث كافة التطبيقات",
"system_upgrade_all_packages_btn": "تحديث كافة الحُزم",
"tcp": "TCP",
"time_since_update": "آخِر تحديث : ",
@ -338,9 +338,9 @@
"certificate_old_letsencrypt_app_conflict": "إنّ تطبيق 'letsencrypt' مُثبّت حاليا و نشأ عن ذلك خلاف مع هذه الميزة. يُرجى منكم إلغاء تنصيبه أولا لتتمكنوا مِن استخدام الواجهة الجديدة لإدارة الشهادات.",
"ssl_certificate": "شهادة أمان SSL",
"confirm_cert_install_LE": "متأكد مِن أنك تريد تثبيت شهادة Let's Encrypt على هذا النطاق ؟",
"confirm_cert_regen_selfsigned": "أتريد إعادة توليد الشهادة الموقعة شخصيا لإسم النطاق هذا ؟",
"confirm_cert_regen_selfsigned": "أتريد إعادة توليد الشهادة الموقعة شخصيا لاسم النطاق هذا؟",
"confirm_cert_manual_renew_LE": "أتريد حقا تجديد شهادة أمان Let's Encrypt الخاصة باسم النطاق هذا يدويًا ؟",
"confirm_cert_revert_to_selfsigned": "هل أنت متأكد مِن أنك تريد إعادة تشغيل النطاق بواسطة شهادة موقعة شخصيًا ؟",
"confirm_cert_revert_to_selfsigned": "هل أنت متأكد مِن أنك تريد إعادة تشغيل النطاق بواسطة شهادة موقعة شخصيًا؟",
"certificate": "الشهادة",
"certificate_status": "حالة الشهادة",
"certificate_authority": "هيئة الشهادات",
@ -355,15 +355,15 @@
"regenerate_selfsigned_cert": "إعادة توليد الشهادة الموقعة ذاتيًا",
"revert_to_selfsigned_cert_message": "إن كنت ترغب في ذلك، بإمكانك إعادة تنصيب شهادة موقعة شخصيًا. (غير مُستحسن)",
"revert_to_selfsigned_cert": "العودة إلى الشهادة الموقعة ذاتيًا",
"appslists": "قوائم البرمجيات",
"appslists": "قوائم التطبيقات",
"appslists_no_lists": "لا توجد قوائم للبرمجيات",
"appslists_custom": "قائمة البرمجيات الخاصة",
"appslists_manage": "إدارة قوائم البرمجيات",
"appslists_confirm_remove": "متأكد من أنك تود حذف قائمة البرمجيات هذه ؟",
"appslists_custom": "قائمة خاصة للتطبيقات",
"appslists_manage": "إدارة قوائم التطبيقات",
"appslists_confirm_remove": "متأكد من أنك تود حذف قائمة التطبيقات هذه؟",
"appslists_info_refresh_desc": "تحديث حالة برمجيات هذه القائمة.",
"appslists_info_remove_desc": "تطبيقات هذه القائمة لن تكون متوفرة بعد اليوم.",
"appslists_last_update": "آخر تحديث",
"appslists_unknown_list": "قائمة البرمجيات مجهولة : %s",
"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>.",
@ -406,5 +406,20 @@
"logs_operation": "الإجراءات التي طرأت على النظام عبر YunoHost",
"logs_no_logs_registered": "لم يُسجَّل هناك أي حدث في سِجِل هذه الفئة",
"logs_end_with_error": "انتهى هذا السِجِل بالخطأ التالي:",
"unmaintained": "غير مُصان"
"unmaintained": "غير مُصان",
"app_state_high-quality": "جودة عالية",
"license": "الرخصة",
"orphaned": "غير مصانة",
"advanced": "متقدّم",
"from_to": "مِن %s إلى %s",
"maintained": "مُصان",
"only_highquality_apps": "إلا التطبيقات ذات الجودة العالية",
"only_decent_quality_apps": "إلا التطبيقات ذات الجودة الحسنة",
"request_adoption": "في انتظار التبنّي",
"request_help": "بحاجة إلى مساعدة",
"confirm_update_system": "أمتأكد مِن أنك تريد تحديث كافة حزم النظام؟",
"experimental_warning": "تحذير: هذه الميزة تجريبية ولا تعتبر مستقرة ، يجب ألا تستخدمها إلا إذا كنت تعرف ما تفعله.",
"hook_conf_ynh_currenthost": "النطاق الرئيسي الحالي",
"logs_package": "سِجلّ إدارة حزم ديبيان",
"error_connection_interrupted": "أغلق الخادم الاتصال بدلاً من الاستجابة. هل تم إعادة تشغيل Nginx أو تم إيقاف تشغيل واجهة برمجة تطبيقات YunoHost؟ (رمز/رسالة الخطأ: %s)"
}

View file

@ -5,7 +5,7 @@
"remove": "Suprimir",
"administration_password": "Contrasenya d'administració",
"allowed_users": "Usuaris permesos",
"api_not_responding": "L'API no respon",
"api_not_responding": "L'API de YunoHost no respon. Pot ser que «yunohost-api» estigui caigut o s'hagi reiniciat?",
"app_access": "Accés",
"app_access_addall_btn": "Habilitar l'accés a tots els utilitzadors",
"app_access_addall_desc": "Tots els usuaris existents tindran accés a %s.",
@ -147,7 +147,7 @@
"hook_adminjs_group_configuration": "Configuració del sistema",
"hook_conf_cron": "Tasques automàtiques",
"hook_conf_ldap": "Base de dades LDAP",
"hook_conf_nginx": "Nginx",
"hook_conf_nginx": "NGINX",
"hook_conf_ssh": "SSH",
"hook_conf_ssowat": "SSOwat",
"hook_conf_xmpp": "XMPP",

View file

@ -280,7 +280,7 @@
"app_state_inprogress": "in Bearbeitung",
"app_state": "Applikationsstatus: ",
"app_repository": "Applikationsherkunft ",
"app_state_notworking": "nicht funktionsfähig",
"app_state_notworking": "nicht funktionierend",
"app_state_working": "funktionierend",
"backup_experimental_warning": "Bitte beachte, dass das Backup-Feature noch experimentell ist und daher noch instabil sein könnte.",
"diagnosis": "Diagnose",

View file

@ -5,22 +5,13 @@
"advanced": "Advanced",
"remove": "Remove",
"administration_password": "Administration password",
"allowed_users": "Allowed users",
"all_apps": "All apps",
"api_not_responding": "API is not responding",
"app_access": "Access",
"app_access_addall_btn": "Enable access to all",
"app_access_addall_desc": "All existing users will have access to %s.",
"app_access_clearall_btn": "Clear all access",
"app_access_clearall_desc": "Every user will have access to %s.",
"app_access_removeall_btn": "Remove all access",
"app_access_removeall_desc": "No users will have access to %s.",
"app_access_title": "%s access",
"all_apps": "All apps",
"api_not_responding": "The YunoHost API is not responding. Maybe 'yunohost-api' is down or got restarted?",
"app_change_label": "Change Label",
"app_change_url": "Change URL",
"app_debug_no_logs": "Application's logs are not available",
"app_debug_tab": "Display debug information",
"app_info_access_desc": "Manage user access. Allowed users: %s",
"app_info_access_desc": "Groups / users currently allowed to access this app:",
"app_info_changelabel_desc": "Change app label in the portal.",
"app_info_debug_desc": "Display debugging information for this application.",
"app_info_default_desc": "Redirect domain root to this application (%s).",
@ -68,10 +59,6 @@
"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?",
@ -145,7 +132,6 @@
"error_server": "Server error",
"error_server_unexpected": "Unexpected server error (%s)",
"error_connection_interrupted": "The server closed the connection instead of answering it. Has nginx or the yunohost-api been restarted or stoppted for some reason? (Error code/message: %s)",
"everyone_has_access": "Everyone has access.",
"experimental_warning": "Warning: this feature is experimental and not consider stable, you shouldn't be using it except if you know what you are doing.",
"filesystem": "Filesystem",
"firewall": "Firewall",
@ -157,6 +143,20 @@
"gateway": "Gateway: ",
"good_practices_about_admin_password": "You are now about to define a new admin password. The password should be at least 8 characters - though it is good practice to use longer password (i.e. a passphrase) and/or to use various kind of characters (uppercase, lowercase, digits and special characters).",
"good_practices_about_user_password": "You are now about to define a new user password. The password should be at least 8 characters - though it is good practice to use longer password (i.e. a passphrase) and/or to use various kind of characters (uppercase, lowercase, digits and special characters).",
"group": "Group",
"group_name": "Group name",
"group_all_users": "All users",
"group_visitors": "Visitors",
"group_format_name_help": "You can use alpha-numeric chars and space",
"group_add_member": "Add a user",
"group_add_permission": "Add a permission",
"group_new": "New group",
"group_explain_all_users": "This is a special group containing all users accounts on the server",
"group_explain_visitors": "This is a special group representing anonymous visitors",
"group_specific_permissions": "User specific permissions",
"groups_and_permissions": "Groups and permissions",
"groups_and_permissions_manage": "Manage groups and permissions",
"permissions": "Permissions",
"home": "Home",
"hook_adminjs_group_configuration": "System configurations",
"hook_conf_cron": "Automatic tasks",
@ -226,10 +226,9 @@
"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.",
"nobody": "Nobody",
"non_compatible_api": "Non-compatible API",
"ok": "OK",
"only_highquality_apps": "Only high-quality apps",
@ -286,7 +285,6 @@
"read": "Read",
"read_more": "Read more",
"reception": "Reception",
"remove_access": "Remove access",
"request_adoption": "waiting adoption",
"request_adoption_details": "The current maintainer would like to stop maintaining this app. Feel free to propose yourself as the new maintainer!",
"request_help": "need help",
@ -296,7 +294,6 @@
"running": "Running",
"save": "Save",
"search_for_apps": "Search for apps...",
"select_user": "Select user",
"select_all": "Select all",
"select_none": "Select none",
"service_description": "Description:",
@ -383,7 +380,6 @@
"users_no": "No users.",
"versions": "Versions",
"version": "Version",
"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",

View file

@ -2,5 +2,428 @@
"password": "Pasvorto",
"login": "Ensaluti",
"logout": "Elsaluti",
"cancel": "Nuligi"
"cancel": "Nuligi",
"error_connection_interrupted": "La servilo fermis la konekton anstataŭ respondi al ĝi. Ĉu nginx aŭ la yunohost-api estis restartigitaj aŭ haltigitaj pro iu kialo? (Erara kodo/mesaĝo: %s)",
"license": "Permesilo",
"app_state_inprogress_explanation": "Ĉi tiu subtenanto de ĉi tiu app deklaris, ke ĉi tiu aplikaĵo ankoraŭ ne estas preta por produktado. ESPERANTU!",
"app_state_notworking_explanation": "Ĉi tiu prizorganto de ĉi tiu app deklaris ĝin \"ne funkcianta\". Ĝi BRAKOS vian sistemon!",
"app_state_high-quality": "alta kvalito",
"app_state_high-quality_explanation": "Ĉi tiu app estas bone integrita kun YunoHost. Ĝi estis (kaj estas!) Reviziita de la teamo de YunoHost. Ĝi povas atendi esti sekura kaj konservi longtempe.",
"app_state_working_explanation": "La prizorganto de ĉi tiu app deklaris ĝin \"laboranta\". Ĝi signifas, ke ĝi devas esti funkcia (c.f. aplika nivelo) sed ne nepre estas reviziita de pereloj, tamen ĝi eble enhavas problemojn aŭ ne plene integriĝas kun YunoHost.",
"maintained": "konservita",
"app_access_clearall_btn": "Forigi ĉiun aliron",
"good_practices_about_user_password": "Vi nun estas por difini novan uzantan pasvorton. La pasvorto devas esti almenaŭ 8 signoj - kvankam estas bone praktiki uzi pli longan pasvorton (t.e. pasfrazon) kaj / aŭ uzi diversajn specojn de signoj (majuskloj, minuskloj, ciferoj kaj specialaj signoj).",
"advanced": "Altnivela",
"from_to": "de %s al %s",
"allowed_users": "Permesitaj uzantoj",
"hook_data_home": "Uzantaj datumoj",
"app_info_uninstall_desc": "Forigu ĉi tiun aplikon.",
"logged_out": "Ensalutinta",
"app_repository": "Apliko-origino: ",
"app_install_cancel": "Instalado nuligita.",
"app_access_removeall_btn": "Forigu ĉian aliron",
"installed_apps": "Instalitaj aplikoj",
"count_min": "%s minimumajn",
"both": "Ambaŭ",
"connection": "Ligo",
"confirm_install_app_warning": "Averto: ĉi tiu aplikaĵo povas funkcii, sed ne bone integras en YunoHost. Iuj funkcioj kiel ekzemple aliĝilo kaj sekurkopio/restarigo eble ne haveblos.",
"hostname": "Hostname",
"confirm_access_clear": "Ĉu vi certas, ke vi volas forigi ĉiun aliron al %s ?",
"all_apps": "Ĉiuj programoj",
"everyone_has_access": "Ĉiuj havas aliron.",
"app_no_actions": "Ĉi tiu apliko ne havas agojn",
"delete": "Forigi",
"download": "Elŝuti",
"confirm_restore": "Ĉu vi certas, ke vi volas restarigi %s ?",
"disk": "Disko",
"custom_app_url_only_github": "Nuntempe nur de GitHub",
"backup_new": "Nova sekurkopio",
"confirm_migrations_skip": "Forlasi migradojn ne rekomendas. Ĉu vi certas, ke vi volas fari tion ?",
"custom_app_install": "Instalu kutimon",
"app_access_clearall_desc": "Ĉiu uzanto havos aliron al %s.",
"confirm_service_disable": "Ĉu vi certas, ke vi volas malebligi %s ?",
"firewall": "Fajroŝirmilo",
"filesystem": "Dosier-sistemo",
"check_stmp": "haveno 25 aliro",
"home": "Hejmo",
"hook_conf_ynh_firewall": "Fajroŝirmilo",
"confirm_reboot_action_shutdown": "Ĉu vi certas, ke vi volas fermi vian servilon ?",
"hook_conf_ssh": "SSH",
"backup_archive_download": "Elŝutu ĉi tiun arkivon",
"free": "liberaj",
"confirm_update_system": "Ĉu vi certas, ke vi volas ĝisdatigi ĉiujn sistemajn pakaĵojn ?",
"backups_no": "Neniu sekurkopio",
"installation_complete": "Kompleta instalado",
"confirm_firewall_open": "Ĉu vi certas, ke vi volas malfermi havenojn %s ? (Protokoloj %s, konekto: %s)",
"application": "aplikaĵo",
"diagnosis_view_private": "Montri diagnozon kun privataj datumoj",
"confirm_postinstall": "Vi tuj lanĉos la postinstalaran procezon sur la domajno %s. Eble daŭras kelkajn minutojn, *ne interrompu la operacion*.",
"description": "priskribo",
"hook_conf_ynh_mysql": "MySQL pasvorto",
"label_for_manifestname": "Etikedo por %s",
"diagnosis": "Diagnozo",
"inactive": "Senaktiva",
"confirm_install_app_danger": "AVERTO! Ĉi tiu aplikaĵo estas ankoraŭ eksperimenta (se ne eksplicite ne funkcias) kaj verŝajne rompos vian sistemon! Vi probable ne devas instali ĝin krom se vi scias kion vi faras. Ĉu vi pretas riski tion ?",
"install_time": "Dato de instalado",
"confirm_upnp_disable": "Ĉu vi certas, ke vi volas malebligi UPnP ?",
"domain_visit_url": "Vizitu %s",
"confirm_change_maindomain": "Ĉu vi certas, ke vi volas ŝanĝi la ĉefan domajnon ?",
"app_change_label": "Ŝanĝu Labeleton",
"app_install_custom_no_manifest": "Neniu manifest.json dosiero",
"error_server": "Servila eraro",
"hook_conf_ynh_certs": "SSL-atestiloj",
"app_access_addall_btn": "Ebligu aliron al ĉiuj",
"hook_conf_nginx": "Nginx",
"confirm_access_remove_user": "Ĉu vi certas, ke vi volas forigi aliron al %s por %s?",
"label": "vortiga",
"confirm_reboot_action_reboot": "Ĉu vi certas, ke vi volas reagordi vian servilon ?",
"confirm_upnp_enable": "Ĉu vi certas, ke vi volas ebligi UPnP ?",
"api_not_responding": "La API YunoHost ne respondas. Eble 'yunohost-api' estas malaperigita aŭ rekomencita?",
"domain_add_dyndns_doc": "... kaj mi volas dinamikan DNS-servon.",
"internal_exception": "<strong> YunoHost renkontis internan eraron: /</strong><br><em> Vere bedaŭras. <br> Vi devas serĉi helpon ĉe <a href = \"https://forum.yunohost.org/ \"> la forumo </a> aŭ <a href=\"https://chat.yunohost.org/\"> la spektaklo </a> por solvi la problemon, aŭ raporti la eraron pri <a href =\" https: / /github.com/YunoHost/issues\"> TheTracking Tool </a>. </em> <br>La jenaj informoj povas esti helpemaj al la helpa persono: <h3> Ago </h3> <antaŭ ><pre>%s %s</pre><h3>spuron</h3><pre>%s</pre>",
"hook_conf_ynh_currenthost": "Nuna ĉefa domajno",
"footer_version": "Funkciigita de <a href='https://yunohost.org'> YunoHost </a> %s (%s).",
"close": "Proksimaj",
"enabled": "Ebligita",
"backup_type": "tipo",
"installing": "Instali",
"app_access_addall_desc": "Ĉiuj ekzistantaj uzantoj havos aliron al% s.",
"app_info_change_url_disabled_tooltip": "Ĉi tiu funkcio ankoraŭ ne estis efektivigita en ĉi tiu app",
"hook_conf_ssowat": "SSOwat",
"backup_archive_delete": "Forigi ĉi tiun ar archiveivon",
"cumulative_usage": "Akumula uzado",
"confirm_delete": "Ĉu vi certas, ke vi volas forigi %s ?",
"domain_dns_conf_is_just_a_recommendation": "Ĉi tiu paĝo montras al vi la *rekomenditan* agordon. Ĝi *ne* agordas la DNS por vi. Estas via respondeco agordi vian DNS-zonon en via DNS-registristo laŭ ĉi tiu rekomendo.",
"available": "Havebla",
"domain_add_panel_with_domain": "Mi jam havas domajnan nomon…",
"error_select_domain": "Vi indiku domajnon",
"current_maintainer_title": "Aktuala subtenanto de ĉi tiu pako",
"copy": "Kopii",
"confirm_access_add": "Ĉu vi certas, ke vi volas aldoni aliron al %s por ĉiuj uzantoj?",
"hook_data_home_desc": "Datumoj pri uzanto lokitaj en /home/USER",
"confirm_service_stop": "Ĉu vi certas, ke vi volas ĉesi %s ?",
"mailbox_quota_placeholder": "Lasu malplenan aŭ agordi al 0 por malaktivigi.",
"domain_default_desc": "La defaŭlta domajno estas la konekta domajno, kie uzantoj ensalutas.",
"domain_dns_longdesc": "Vidu DNS-agordon",
"domain_add_dns_doc": "... kaj mi <a href='//yunohost.org/dns'> agordis mian DNS ĝuste </a>.",
"confirm_update_apps": "Ĉu vi certas, ke vi volas ĝisdatigi ĉiujn aplikojn ?",
"confirm_install_custom_app": "AVERTO! Instali aplikojn de tria partio eble kompromitos la integrecon kaj sekurecon de via sistemo. Vi probable ne devas instali ĝin krom se vi scias kion vi faras. Ĉu vi pretas riski tion?",
"app_debug_tab": "Montriĝo-elpurigajn informojn",
"backup_archive_copy": "Kopiu ĉi tiun ar archiveivon sur alian stokadon",
"add": "Aldoni",
"check_mx": "MX rekordo",
"remove": "Forigi",
"gateway": "Pordego: ",
"confirm_update_specific_app": "Ĉu vi certas, ke vi volas ĝisdatigi %s ?",
"confirm_service_start": "Ĉu vi certas, ke vi volas komenci %s ?",
"local_archives": "Lokaj arkivoj",
"app_make_default": "Faru defaŭlta",
"app_info_default_desc": "Redirektu domajn radikon al ĉi tiu apliko (%s).",
"hook_adminjs_group_configuration": "Sistemaj agordoj",
"error_server_unexpected": "Neatendita erara servilo (%s)",
"domain_dns_config": "Agordo DNS",
"cpu_load": "CPU Ŝarĝo",
"form_input_example": "Ekzemplo: %s",
"app_info_access_desc": "Administri la aliron de uzanto. Permesitaj uzantoj : %s",
"diagnosis_with_private": "Diagnozo kun privataj datumoj",
"install_name": "Instalu %s",
"domain_default": "Defaŭlta domajno",
"interface": "interfaco",
"administration_password": "Administra pasvorto",
"app_access_removeall_desc": "Neniuj uzantoj havos aliron al %s.",
"app_info_changeurl_desc": "Ŝanĝu la aliron URL de ĉi tiu aplikaĵo (domajno kaj/aŭ vojo).",
"app_info_changelabel_desc": "Ŝanĝu etikedon en la portalo.",
"app_access": "Aliro",
"app_state": "Aplikoŝtato: ",
"app_debug_no_logs": "La protokoloj ne estas haveblaj",
"hook_data_mail": "Poŝto",
"confirm_service_enable": "Ĉu vi certas, ke vi volas ebligi %s ?",
"backup_create": "Krei sekurkopion",
"disabled": "Malebligita",
"io": "I/O",
"fs_type": "Tipo de dosiersistemo",
"domain_select": "Elekti domajnon",
"confirm_uninstall": "Ĉu vi certas, ke vi volas malinstali %s ?",
"confirm_firewall_close": "Ĉu vi certas, ke vi volas fermi havenon %s ? (protokolo: %s, rilato: %s)",
"created_at": "Kreita ĉe",
"confirm_access_remove_all": "Ĉu vi certas, ke vi volas forigi ĉian aliron al %s ?",
"app_list": "Aplika listo",
"available_apps": "Haveblaj aplikoj",
"confirm_app_change_url": "Ĉu vi certas, ke vi volas ŝanĝi la URL-aliron de la aplikaĵo?",
"ipv6": "IPv6",
"begin": "Komencu",
"error_retrieve_feed": "Ne povis akiri la nutraĵon: %s . Vi eble havas kromprogramon malebligi vian retumilon plenumi ĉi tiun peton (aŭ la retejo malŝaltiĝas).",
"disable": "Malŝalti",
"domain_default_longdesc": "Jen via defaŭlta domajno.",
"hook_data_mail_desc": "Krudaj retpoŝtoj konservitaj en la servilo",
"action": "Agado",
"good_practices_about_admin_password": "Vi nun estas difinonta novan administran pasvorton. La pasvorto devas esti almenaŭ 8 signoj - kvankam estas bone praktiki uzi pli longan pasvorton (t.e. pasfrazon) kaj / aŭ uzi diversajn specojn de signoj (majuskloj, minuskloj, ciferoj kaj specialaj signoj).",
"app_state_working": "laborante",
"installed": "Instalita",
"ok": "bone",
"logged_in": "Ensalutinta",
"local_ip": "Loka IP",
"backup_optional_password": "Laŭvola pasvorto",
"experimental_warning": "Averto: ĉi tiu funkcio estas eksperimenta kaj ne konsideras stabila, vi ne devas uzi ĝin krom se vi scias kion vi faras.",
"hook_conf_cron": "Aŭtomataj taskoj",
"log": "Ensaluto",
"domain_visit": "Vizitu",
"hook_conf_ldap": "Datumbazo LDAP",
"install": "Instalu",
"app_change_url": "Ŝanĝi URL",
"confirm_install_domain_root": "Vi ne povos instali iun alian app en %s. Daŭrigi ?",
"confirm_app_default": "Ĉu vi certas, ke vi volas igi ĉi tiun programon defaŭlta?",
"active": "Aktiva",
"error_modify_something": "Vi devus modifi ion",
"applications": "aplikoj",
"app_level": "Apliko nivelo",
"domain_add": "Aldoni domajnon",
"domain_delete_longdesc": "Forigi ĉi tiun domajnon",
"domain_name": "Domajna nomo",
"backup_action": "Rezerva",
"mailbox_quota_description": "Ekzemple, 700M estas KD, 4700M estas DVD.",
"app_state_notworking": "ne funkcianta",
"enable": "Ebligi",
"backup_encryption_warning": "Ne forgesu ĉi tiun pasvorton, vi bezonos ĝin se vi volas restarigi la ar theivon",
"domain_add_panel_without_domain": "Mi ne havas domajnan nomon…",
"backup_optional_encryption": "Laŭvola ĉifrado",
"backup_content": "Rezerva enhavo",
"backup": "Rezerva",
"default": "Defaŭlta",
"domain_list": "Domajna Listo",
"domains": "Domajnoj",
"diagnosis_hide_private": "Montri diagnozon sen privataj datumoj",
"app_access_title": "%s aliro",
"ipv4": "IPv4",
"domain": "Domajno",
"app_state_inprogress": "en progreso",
"dns": "DNS",
"app_info_debug_desc": "Montriĝo pri elpurigado de ĉi tiu apliko.",
"archive_empty": "Malplena arkivo",
"check": "Kontrolu",
"level": "nivelo",
"loading": "Ŝarĝante…",
"infos": "Informoj",
"bit_rate": "Bito kurzo",
"hook_conf_xmpp": "XMPP",
"id": "ID",
"logs_access": "Listo de aliroj kaj malpermesoj",
"maintained_details": "Ĉi tiu programo estis prizorgita de ĝia subtenanto dum la lastaj monatoj.",
"only_highquality_apps": "Nur altkvalitaj programoj",
"only_decent_quality_apps": "Nur deca kvalito apps",
"orphaned": "ne konservita",
"request_adoption": "atendanta adopto",
"migrations_pending": "Pendaj migradoj",
"next": "Sekva",
"orphaned_details": "Ĉi tiu app ne plu estas konservita. Ĝi eble ankoraŭ funkcios, sed ne ricevos iun ĝisdatigon. Sentu vin libera revivi ĝin!",
"request_adoption_details": "La nuna prizorganto ŝatus ĉesi subteni ĉi tiun app. Bonvolu proponi vin kiel la novan prizorganton!",
"request_help": "bezonas helpon",
"request_help_details": "La nuna prizorganto ŝatus iom da helpo pri la bontenado de ĉi tiu app. Bonvolu veni kontribui pri ĝi!",
"user_email": "Retpoŝto",
"postinstall_intro_1": "Gratulojn! YunoHost estis sukcese instalita.",
"time_since_update": "Tempo ekde ĝisdatigo: ",
"no_installed_apps": "Neniuj instalitaj programoj.",
"usage": "uzo",
"uninstall": "Malinstali",
"users_new": "Nova uzanto",
"users": "Uzantoj",
"system_apps_nothing": "Ne estas programoj por ĝisdatigi.",
"used": "Uzata",
"tools_security_feed_view_items": "Vidu ĉiujn sekurecajn sciigojn",
"certificate_alert_letsencrypt_about_to_expire": "Nuna atestilo estas preskaŭ eksvalidiĝi. Ĝi baldaŭ renoviĝu aŭtomate.",
"version": "versio",
"yes": "Jes",
"skip": "Salti",
"search_for_apps": "Serĉi aplikojn ...",
"upnp_disabled": "UPnP estas malebligita.",
"logs_no_logs_registered": "Neniu registro registrita por ĉi tiu kategorio",
"certificate_alert_good": "Bone, nuna atestilo aspektas bone!",
"network": "reto",
"purge_user_data_warning": "Purgaj datumoj de uzanto ne estas reverteblaj. Nepre vi scias, kion vi faras!",
"domain_not_eligible_for_ACME": "Ĉi tiu domajno ne ŝajnas preta por Letero-Ĉifrado. Bonvolu kontroli vian atingon de DNS-agordo kaj HTTP-servilo.",
"password_description": "Pasvorto devas esti almenaŭ %s signoj longa.",
"select_all": "Elekti ĉiujn",
"tcp": "TCP",
"domain_is_eligible_for_ACME": "Ĉi tiu domajno ŝajnas ĝuste agordita por instali atestilon Lasu Ĉifri!",
"system_upgrade_btn": "Altgradigon",
"ssl_certificate": "SSL-atestilo",
"certificate_manage": "Administri SSL-atestilon",
"tools_security_feed_subscribe_rss": "Aboni RSS pri sciigoj",
"tools_adminpw_confirm_placeholder": "Konfirmu la novan pasvorton",
"total": "Entute",
"confirm_cert_install_LE": "Ĉu vi certas, ke vi volas instali atestilon Lasu Ĉifri por ĉi tiu domajno?",
"myserver_org": "miaservisto.org",
"logs_operation": "Operacioj faritaj sur sistemo kun YunoHost",
"monitoring_check_glances": "Kontrolu <a href='#/services/glances'> rigardojn </a> servo-staton.",
"appslists": "Aplikoj-listoj",
"install_letsencrypt_cert": "Instalu atestilon Lasu-Ĉifri",
"appslists_custom": "Propra listo listo",
"no_log": "Neniu ŝtipo.",
"system_packages_nothing": "Ne estas pakoj por ĝisdatigi.",
"system_upgrade_all_applications_btn": "Ĝisdatigu ĉiujn aplikojn",
"postinstall": "post Instalaĵo",
"service_description": "Priskribo:",
"uptime": "Kuracado",
"revert_to_selfsigned_cert": "Reiru al mem-subskribita atestilo",
"certificate_old_letsencrypt_app_conflict": "La app 'letsencrypt' estas nuntempe instalita kaj konfliktas kun ĉi tiu funkcio. Bonvolu malinstali ĝin unue por uzi la novan registritan administran interfacon.",
"system_update": "Sistema ĝisdatigo",
"unauthorized": "Ne rajtigita",
"wrong_password": "Erara pasvorto",
"tools_security_feed": "Sekurecaj sciigoj",
"system_packages": "Pakoj",
"certificate_alert_unknown": "Nekonata stato",
"tools_shutdown_reboot": "Ŝalti/Rekomenci",
"logs_started_at": "Komencu",
"confirm_cert_revert_to_selfsigned": "Ĉu vi certas, ke vi volas reverti ĉi tiun domajnon al mem-subskribita atestilo?",
"postinstall_domain": "Ĉi tiu estas la unua domajna nomo ligita al via servilo YunoHost, sed ankaŭ la uzata de la uzantoj de via servilo por aliri la aŭtentikan portalon. Laŭe ĝi estos videbla de ĉiuj, do elektu ĝin zorgeme.",
"users_no": "Neniuj uzantoj.",
"tools_shutdown": "Enŝaltu vian servilon",
"validity": "Valideco",
"upnp_enabled": "UPnP estas ebligita.",
"tools_reboot": "Reklamu vian servilon",
"mode": "Modon",
"manage_domains": "Administri domajnojn",
"user_username_edit": "Redakti %s konton",
"mount_point": "Montpunkto",
"logs_package": "Historio pri administrado de pakoj Debian",
"user_new_forward": "novjora@myforeigndomain.org",
"manually_renew_letsencrypt_message": "Atestilo estos aŭtomate renovigita dum la lastaj 15 tagoj de valideco. Vi povas permane renovigi ĝin se vi volas. (Ne rekomendita).",
"logs_share_with_yunopaste": "Kunhavigu kun YunoPaste",
"tools_download_ca": "Elŝutu SSL Atestilon-Aŭtoritaton (CA)",
"certificate": "Atestilo",
"logs_system": "Kernel ŝtipoj kaj aliaj malaltnivelaj eventoj",
"user_emailaliases": "Poŝti alias",
"certificate_authority": "Atestado-aŭtoritato",
"unmaintained": "Malkomprenita",
"regenerate_selfsigned_cert": "Regeneri mem-subskribitan atestilon",
"unknown_argument": "Nekonata argumento: %s",
"ports": "havenoj",
"select_user": "Elektu uzanton",
"system": "Sistemo",
"tools_reboot_btn": "Rekomencu",
"logs_history": "Historio de komando funkcianta sur sistemo",
"read_more": "Legu pli",
"monitoring_disabled": "Monitorado ne estas enŝaltita.",
"previous": "Antaŭa",
"services_list": "Servo-Listo",
"manage_users": "Administri uzantojn",
"logs_service": "Servoj ŝtipoj",
"tools_rebooting": "Via servilo rekomencas. Por reveni al la retadministra interfaco, vi devas atendi, ke via servilo funkcios. Vi povas kontroli tion per refreŝigado de ĉi tiu paĝo (F5).",
"tools_adminpw": "Ŝanĝu administran pasvorton",
"service_log": "%s ŝtipo",
"write": "Skribu",
"multi_instance": "Multaj ekzemploj",
"no_allowed_users": "Neniuj permesitaj uzantoj.",
"non_compatible_api": "Ne kongrua API",
"revert_to_selfsigned_cert_message": "Se vi vere volas, vi povas reinstali mem-subskribitan atestilon. (Ne rekomendita)",
"tools_adminpw_current_placeholder": "Enigu vian nunan pasvorton",
"user_mailbox_quota": "Poŝta kesto",
"operations": "Operacioj",
"migrations_done": "Antaŭaj migradoj",
"password_new": "Nova pasvorto",
"manually_renew_letsencrypt": "Mane renovigu nun",
"tools_adminpw_current": "Aktuala Pasvorto",
"appslists_manage": "Administri listojn de aplikoj",
"menu": "menuo",
"service_start_on_boot": "Komencu je ekkuro: ",
"storages_new": "Nova fora stokado",
"storage_create": "Aldonu forajn stokadojn",
"regenerate_selfsigned_cert_message": "Se vi volas, vi povas regeneri la mem-subskribitan atestilon.",
"migrations_no_pending": "Neniuj pritraktataj migradoj",
"appslists_last_update": "Lasta ĝisdatigo",
"logs_more": "Vidigu pliajn liniojn",
"logs_error": "Eraro",
"certificate_status": "Atestita statuso",
"no": "Ne",
"remove_access": "Forigi aliron",
"transmission": "transdono",
"upload_archive": "Alŝuta arkivo",
"tools_shutdown_btn": "Fermito",
"purge_user_data_checkbox": "Purigi datumojn de %s? (Ĉi tio forigos la enhavon de ĝiaj hejmaj kaj poŝtaj adresaroj.)",
"appslists_info_refresh_desc": "Refreŝigi statojn de ĉi tiu listo.",
"migrations": "migrado",
"logs_ended_at": "Fino",
"restore": "Restaŭri",
"meltdown": "Vi estas vundebla al la <a target=\"_blank\" href=\"https://meltdownattack.com/\"> meltdown </a> maltrankviliga sekureco. Por ripari tion, vi devas <a href=\"#/update\"> ĝisdatigi vian sistemon </a> tiam <a href=\"#/tools/reboot\"> reŝalti ĝin </a> por ŝarĝi la novan linux-kernon.",
"view_user_profile": "Vidi %s profilon",
"user_mailbox_use": "Poŝtejo uzis spacon",
"appslists_unknown_list": "Listo de nekonataj programoj: %s",
"appslists_info_remove_desc": "Aplikoj de ĉi tiu listo ne plu estos haveblaj.",
"only_working_apps": "Nur funkciantaj programoj",
"postinstall_password": "Ĉi tiu pasvorto estos uzata por administri ĉion en via servilo. Prenu la tempon por elekti ĝin prudente.",
"start": "Komencu",
"certificate_alert_great": "Bonega! Vi uzas validan atestilon Lasu Ĉifri!",
"tools_download_ca_desc": "Alklaku ĉi tie por elŝuti vian SSL-atestan aŭtoritaton (CA)",
"confirm_cert_regen_selfsigned": "Ĉu vi certas, ke vi volas regeneri mem-subskribitan atestilon por ĉi tiu domajno?",
"storages_no": "Neniuj magazenoj.",
"passwords_too_short": "Pasvorto estas tro mallonga",
"appslists_confirm_remove": "Ĉu vi certas, ke vi volas forigi ĉi tiun liston de aplikoj?",
"myserver": "mia servisto",
"tools_adminpw_new_placeholder": "Enigu la novan pasvorton",
"user_emailforward": "Poŝti antaŭen",
"certificate_alert_about_to_expire": "AVERTO: Nuna atestilo finos! Ĝi ne renoviĝos aŭtomate!",
"system_upgrade_all_packages_btn": "Ĝisdatigu ĉiujn pakaĵojn",
"logs_end_with_error": "Ĉi tiu ŝtipo finiĝis per la eraro:",
"users_list": "Uzantlisto",
"migrations_no_done": "Neniuj antaŭaj migradoj",
"url": "URL",
"versions": "versioj",
"select_none": "Elektu neniun",
"size": "Grandeco",
"confirm_cert_manual_renew_LE": "Ĉu vi certas, ke vi volas permane renovigi la atestilon Lasu Ĉifri por ĉi tiu regado nun?",
"process": "Procezo",
"upload": "Alŝuti",
"logs": "Registroj",
"postinstall_intro_3": "Vi povas akiri pliajn informojn vizitante la <a href='//yunohost.org/postinstall' target='_blank'> taŭgan dokumentan paĝon </a>",
"user_new_mail": "novaĵisto@miadomino.org",
"tools_shuttingdown": "Via servilo elŝaltas. Tiel longe kiel via servilo malŝaltas, vi ne povos uzi la retan administradon.",
"logs_app": "Aplikoj ŝtipoj",
"tools_security_feed_no_items": "Neniuj sekurecaj sciigoj",
"running": "Kurado",
"reception": "Ricevo",
"appslists_no_lists": "Neniuj aplikoj-listoj",
"tools_shutdown_done": "Fermi ...",
"certificate_alert_not_valid": "KRITIKO: Nuna atestilo ne validas! HTTPS tute ne funkcios!",
"path_url": "Pado",
"status": "Statuso",
"set_default": "Fiksita defaŭlte",
"upnp": "UPnP",
"certificate_alert_selfsigned": "AVERTO: Nuna atestilo estas mem-subskribita. Foliumiloj aperigos timigan averton al novaj vizitantoj!",
"system_upgrade": "Sistema ĝisdatigo",
"protocol": "Protokolo",
"tools": "iloj",
"os": "Mastruma sistemo",
"port": "haveno",
"public_ip": "Publika IP: ",
"passwords_dont_match": "Pasvortoj ne kongruas",
"service_status": "Statuso: ",
"user_fullname": "Plena nomo",
"stop": "Ĉesu",
"save": "ŝpari",
"warning_first_user": "Vi probable devas <a href='#/users/create' class='alert-link'> krei unue uzanton </a>.",
"logs_context": "Kunteksto",
"services": "servoj",
"logs_path": "Pado",
"read": "legado",
"run": "Kuri",
"manage_apps": "Administri aplikon",
"system_apps": "Aplikoj",
"user_username": "Uzantnomo",
"path": "Pado",
"password_confirmation": "Pasvorta konfirmo",
"open": "Malfermu",
"unknown_action": "Nekonata ago %s",
"memory": "Memoro",
"refresh_app_list": "Refreŝigi liston",
"ram": "RAM",
"started_at": "Komencite ĉe:",
"tools_reboot_done": "Rekomencanta ...",
"monitoring": "Monitorado",
"password_empty": "La pasvorta kampo estas malplena",
"no_user_to_add": "Ne plu uzantoj aldoni.",
"postinstall_intro_2": "Du pliaj agordaj paŝoj necesas por aktivigi la servojn de via servilo.",
"name": "Nomo",
"udp": "UDP",
"swap": "Interŝanĝu",
"user_interface_link": "Uzantinterfaco"
}

View file

@ -3,7 +3,7 @@
"add": "Añadir",
"administration_password": "Contraseña de administración",
"allowed_users": "Usuarios permitidos",
"api_not_responding": "La API no está respondiendo",
"api_not_responding": "La API de YunoHost no responde. ¿Tal vez «yunohost-api» está inoperativa o ha sido reiniciada?",
"app_access": "Acceso",
"app_access_addall_btn": "Habilitar acceso para todos",
"app_access_addall_desc": "Todos los usuarios existentes tendrán acceso a %s 1.",
@ -24,10 +24,10 @@
"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_inprogress": "en marcha",
"app_state_notworking": "no funciona",
"app_state_validated": "Validado",
"app_state_working": "Funcionando",
"app_state_working": "funciona",
"application": "Aplicación",
"applications": "Aplicaciones",
"archive_empty": "Archivo vacío",
@ -65,7 +65,7 @@
"confirm_change_maindomain": "¿Está seguro de que desea cambiar el dominio principal?",
"confirm_delete": "¿Está seguro que desea eliminar %s?",
"confirm_firewall": "Está seguro de %s puerto %s (protocolo: %s, conexión: %s)",
"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_custom_app": "¡AVISO! La instalación de aplicaciones de terceros puede comprometer la seguridad e integridad de su sistema. Probablemente debería NO instalarla salvo que sepa lo que está haciendo. ¿Está dispuesto a correr el riesgo?",
"confirm_install_domain_root": "No podrá instalar otra aplicación en %s. ¿Desea continuar?",
"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_restore": "¿Está seguro que desea restaurar %s?",
@ -115,7 +115,7 @@
"enabled": "Habilitado",
"error_modify_something": "Debe modificar algo",
"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 la fuente: %s. Puede que tenga una extensión en su navegador bloqueando esta solicitud (o puede que el sitio web esté caído).",
"error_select_domain": "Debe indicar un dominio",
"error_server": "Error del servidor",
"error_server_unexpected": "Error inesperado en el servidor (%s)",
@ -126,20 +126,20 @@
"fs_type": "Tipo de sistema de archivos",
"gateway": "Puerta: ",
"home": "Inicio",
"hook_adminjs_group_configuration": "Configuración",
"hook_conf_cron": "Tareas periódicas",
"hook_conf_ldap": "LDAP",
"hook_adminjs_group_configuration": "ajustes del sistema",
"hook_conf_cron": "Tareas automáticas",
"hook_conf_ldap": "base de datos 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_certs": "Certificados SSL",
"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": "Correos almacenados en el servidor",
"hook_data_mail_desc": "Correos sin procesar almacenados en el servidor",
"hostname": "Nombre del anfitrión",
"id": "ID",
"inactive": "Inactivo",
@ -362,8 +362,83 @@
"confirm_install_app_warning": "Aviso: esta aplicación puede funcionar pero no está bien integrada en YunoHost. Algunas características como inicio de sesión único y copia de seguridad/restauración podría no estar disponible.",
"confirm_install_app_danger": "¡AVISO! ¡Esta aplicación es aún experimental (puede que ni funcione) y es probable que rompa su sistema! Seguramente debería NO instalarla salvo que sepa lo que está haciendo. ¿Está dispuesto a correr ese riesgo?",
"current_maintainer_title": "Mantenedor actual de este paquete",
"error_connection_interrupted": "El servidor cerró la conexión en vez de responder, ¿se ha reiniciado nginx por error? (Código de error/mensaje: %s)",
"error_connection_interrupted": "El servidor cerró la conexión en vez de responder. ¿Ha sido reiniciado o parado nginx o yunohost-api por cualquier motivo? (Código de error/mensaje: %s)",
"experimental_warning": "Aviso: esta característica es experimental y no se considera estable, no debería usarla salvo que sepa lo que está haciendo.",
"good_practices_about_admin_password": "Está a punto de establecer una nueva contraseña de administrador. La contraseña debería de ser de al menos 8 caracteres, aunque es una buena práctica usar una contraseña más larga (es decir, una frase de paso) y/o usar varias clases de caracteres (mayúsculas, minúsculas, dígitos y caracteres especiales).",
"good_practices_about_user_password": "Está a punto de establecer una nueva contraseña de usuario. La contraseña debería de ser de al menos 8 caracteres, aunque es una buena práctica usar una contraseña más larga (es decir, una frase de paso) y/o usar varias clases de caracteres (mayúsculas, minúsculas, dígitos y caracteres especiales)."
"good_practices_about_user_password": "Está a punto de establecer una nueva contraseña de usuario. La contraseña debería de ser de al menos 8 caracteres, aunque es una buena práctica usar una contraseña más larga (es decir, una frase de paso) y/o usar varias clases de caracteres (mayúsculas, minúsculas, dígitos y caracteres especiales).",
"app_state_notworking_explanation": "El mantenedor de esta aplicación declara que «no funciona». ¡ROMPERÁ SU SISTEMA!",
"app_state_high-quality": "calidad alta",
"license": "Licencia",
"maintained": "mantenido",
"maintained_details": "Esta aplicación ha sido mantenida por su mantenedor en los últimos meses.",
"confirm_update_system": "¿Seguro que quiere actualizar todos los paquetes del sistema?",
"advanced": "Avanzado",
"from_to": "desde %s a %s",
"only_highquality_apps": "Solo aplicaciones de alta calidad",
"only_decent_quality_apps": "Solo aplicaciones de calidad aceptable",
"orphaned": "sin mantenimiento",
"request_adoption": "pendiente de adopción",
"request_adoption_details": "Al mantenedor actual le gustaría dejar de mantener esta aplicación. ¡No dude en ofrecerse como el nuevo mantenedor!",
"request_help": "necesita ayuda",
"app_state_inprogress_explanation": "El mantenedor de esta aplicación declara que aún no está lista para su uso en producción. ¡TENGA CUIDADO!",
"app_state_high-quality_explanation": "Esta aplicación está bien integrada en YunoHost. Ha sido (¡y continua siendo!) revisada por especialistas del equipo de aplicaciones de YunoHost. Se puede esperar que sea segura y mantenida a largo plazo.",
"app_state_working_explanation": "El mantenedor de esta aplicación declara que «funciona». Significa que debería ser funcional (comparada a nivel de aplicación) pero no está revisada por especialistas necesariamente, puede tener aún problemas o no está totalmente integrada en YunoHost.",
"orphaned_details": "Esta aplicación ya no se mantiene. Puede que funcione pero no se actualizará. ¡No dude en venir y reanimarla!",
"request_help_details": "Al mantenedor actual le gustaría recibir alguna ayuda con el mantenimiento de esta aplicación. ¡No dude en venir a contribuir!",
"tools_rebooting": "Su servidor se está reiniciando. Para volver a la interfaz de administración web necesita esperar a que el servidor esté listo. Puede comprobarlo recargando esta página (F5).",
"tools_shutdown_btn": "Apagar",
"name": "Nombre",
"logs": "Registros",
"logs_app": "Registros de aplicaciones",
"logs_ended_at": "Fin",
"appslists_last_update": "Última actualización",
"internal_exception": "<strong>Yunohost encontró un error interno:/</strong><br><em>Lo siento realmente.<br>Debería buscar ayuda en <a href=\"https://forum.yunohost.org/\">el foro</a> o en <a href=\"https://chat.yunohost.org/\">el chat</a> para arreglarlo o informar del fallo en <a href=\"https://github.com/YunoHost/issues\">el seguimiento de errores («bugtracker»)</a>.</em><br>La siguiente información podría ser útil para la persona que le ayude:<h3>Acción</h3><pre>%s%s</pre><h3>Rastreo</h3><pre>%s</pre>",
"unmaintained": "Sin mantenimiento",
"appslists_info_refresh_desc": "Actualizar el estado de las aplicaciones para esta lista.",
"logs_no_logs_registered": "Ningún registro para esta categoría",
"path_url": "Ruta",
"started_at": "Comenzó en:",
"hook_conf_ynh_currenthost": "dominio principal actual",
"purge_user_data_warning": "Los datos de usuario eliminados no se pueden recuperar. ¡Asegúrese de saber lo que está haciendo!",
"logs_end_with_error": "Este registro terminó con el error:",
"search_for_apps": "Buscar aplicaciones...",
"logs_context": "Contexto",
"meltdown": "Es vulnerable al problema crítico de seguridad de <a target=\"_blank\" href=\"https://meltdownattack.com/\">meltdown</a>. Para solucionarlo necesita <a href=\"#/update\">actualizar su sistema</a> y luego <a href=\"#/tools/reboot\">reiniciar</a> para que se cargue el nuevo núcleo de Linux.",
"only_working_apps": "Solo aplicaciones que funcionan",
"logs_system": "Registros del núcleo y otros eventos de bajo nivel",
"logs_share_with_yunopaste": "Compartir con YunoPaste",
"logs_package": "Historial de la gestión de los paquetes de Debian",
"logs_history": "Historial de órdenes ejecutadas en el sistema",
"migrations_no_pending": "Ninguna migración pendiente",
"appslists_unknown_list": "Lista de aplicaciones desconocidas: %s",
"tools_shutdown_reboot": "Apagar/Reiniciar",
"logs_more": "Mostrar más líneas",
"select_none": "No seleccionar ninguna",
"appslists_manage": "Administrar listas de aplicaciones",
"logs_path": "Ruta",
"purge_user_data_checkbox": "¿Eliminar los datos de %s? (Esto eliminará el contenido de sus directorios «home» y «mail».)",
"migrations_no_done": "Ninguna migración anterior",
"logs_access": "Lista de accesos y prohibiciones",
"tools_reboot_done": "Reiniciando...",
"appslists_custom": "Lista de aplicaciones personalizada",
"tools_shutdown": "Apagar su servidor",
"appslists_no_lists": "Ninguna lista de aplicaciones",
"tools_reboot_btn": "Reiniciar",
"appslists": "Listas de aplicaciones",
"version": "Versión",
"appslists_info_remove_desc": "Las aplicaciones de esta lista ya no estarán disponibles.",
"tools_shutdown_done": "Apagando...",
"tools_reboot": "Reiniciar su servidor",
"tools_shuttingdown": "Su servidor se está apagando. Mientras que el servidor esté apagado no podrá usar la administración web.",
"logs_started_at": "Inicio",
"logs_service": "Registros de servicios",
"run": "Ejecutar",
"logs_error": "Error",
"service_description": "Descripción:",
"skip": "Omitir",
"system_upgrade_all_packages_btn": "Actualizar todos los paquetes",
"appslists_confirm_remove": "¿Seguro que quiere eliminar esta lista de aplicaciones?",
"level": "nivel",
"system_upgrade_all_applications_btn": "Actualizar todas las aplicaciones",
"select_all": "Seleccionar todo"
}

View file

@ -3,7 +3,7 @@
"add": "Ajouter",
"administration_password": "Mot de passe d'administration",
"allowed_users": "Utilisateurs autorisés",
"api_not_responding": "L'API ne répond pas",
"api_not_responding": "L'API YunoHost ne répond pas. Peut-être que 'yunohost-api' est en panne ou a été redémarré ?",
"app_access": "Accès",
"app_access_addall_btn": "Ajouter l'accès à tous les utilisateurs",
"app_access_addall_desc": "Tous les utilisateurs ont accès à %s.",
@ -396,7 +396,7 @@
"confirm_install_app_warning": "Avertissement : cette application peut fonctionner mais nest pas bien intégrée dans YunoHost. Certaines fonctionnalités telles que lauthentification unique et la sauvegarde/restauration pourraient ne pas être disponibles.",
"confirm_install_app_danger": "AVERTISSEMENT ! Cette application est encore expérimentale et risque de casser votre système ! Vous ne devriez probablement PAS linstaller si vous ne savez pas ce que vous faites. Voulez-vous vraiment prendre ce risque ?",
"current_maintainer_title": "Mainteneur actuel de ce paquet",
"error_connection_interrupted": "Le serveur a fermé la connexion au lieu dy répondre, est-ce que Nginx a été redémarré ou l'API YunoHost s'est-elle arrêtée pour diverses raisons ? (code/message derreur : %s)",
"error_connection_interrupted": "Le serveur a fermé la connexion au lieu dy répondre. Est-ce que Nginx a été redémarré ou est-ce que l'API YunoHost s'est-elle arrêtée pour diverses raisons ? (code/message derreur : %s)",
"experimental_warning": "Attention : cette fonctionnalité est expérimentale et ne doit pas être considérée comme stable, vous ne devriez pas lutiliser à moins que vous ne sachiez ce que vous faites...",
"good_practices_about_admin_password": "Vous êtes maintenant sur le point de définir un nouveau mot de passe administrateur. Le mot de passe doit comporter au moins 8 caractères — bien quil soit recommandé dutiliser un mot de passe plus long (cest-à-dire une phrase secrète) et/ou dutiliser différents types de caractères (majuscules, minuscules, chiffres et caractères spéciaux).",
"good_practices_about_user_password": "Vous êtes maintenant sur le point de définir un nouveau mot de passe utilisateur. Le mot de passe doit comporter au moins 8 caractères - bien quil soit recommandé dutiliser un mot de passe plus long (cest-à-dire une phrase secrète) et/ou dutiliser différents types de caractères tels que : majuscules, minuscules, chiffres et caractères spéciaux.",

View file

@ -1 +1,9 @@
{}
{
"cancel": "Avbryt",
"login": "Logg inn",
"ok": "OK",
"logout": "Logg ut",
"logged_out": "Utlogget",
"logged_in": "Innlogget",
"password": "Passord"
}

View file

@ -1,4 +1,170 @@
{
"action": "Åtgärd",
"active": "Aktiv"
"active": "Aktiv",
"services": "Tjänster",
"protocol": "Protokoll",
"license": "Licens",
"hook_conf_ssowat": "SSOwat",
"advanced": "Avancerat",
"from_to": "mellan %s och %s",
"hook_conf_ynh_currenthost": "Nuvarande huvuddomän",
"only_highquality_apps": "Endast högkvalitativa applikationer",
"only_decent_quality_apps": "Endast applikationer av god kvalitet",
"request_help": "behöver hjälp",
"domain_select": "Välj domän",
"installed": "Installerad",
"domain_add_dyndns_doc": "… och jag vill använda en dynamisk DNS-tjänst.",
"myserver_org": "minserver.org",
"ipv4": "IPv4",
"ram": "Arbetsminne",
"inactive": "Inaktiv",
"only_working_apps": "Endast fungerande applikationer",
"restore": "Återskapa",
"gateway": "Gateway: ",
"installing": "Installerar",
"migrations": "Förflyttningar",
"services_list": "Lista över tjänster",
"logs_ended_at": "Slut",
"firewall": "Brandvägg",
"manage_users": "Hantera användare",
"mailbox_quota_description": "Som jämförelse är 700 MB en CD-skiva och 4700 MB en DVD.",
"app_info_access_desc": "Hantera användaråtkomst. Tillåtna användare: %s",
"domain_add": "Lägg till domän",
"app_access_addall_btn": "Ge alla åtkomst",
"logs_share_with_yunopaste": "Dela med YunoPaste",
"logout": "Logga ut",
"enable": "Aktivera",
"logged_in": "Inloggad",
"domain_default_longdesc": "Detta är din standarddomän.",
"next": "Nästa",
"app_change_label": "Redigera etikett",
"select_all": "Markera alla",
"no": "Nej",
"domain_visit_url": "Besök %s",
"footer_version": "Drivs av <a href='https://yunohost.org'>YunoHost</a> %s (%s).",
"domains": "Domäner",
"app_access_clearall_btn": "Neka alla åtkomst",
"domain_list": "Lista över domäner",
"hook_conf_ynh_mysql": "MySQL-lösenord",
"administration_password": "Administratörslösenord",
"remove": "Ta bort",
"hook_adminjs_group_configuration": "Systeminställningar",
"hook_data_home": "Användardata",
"app_info_debug_desc": "Visa felsökningsinformation för den här applikationen.",
"select_user": "Välj användare",
"cancel": "Avbryt",
"memory": "Minne",
"mailbox_quota_placeholder": "Lämna tomt eller skriv 0 för att avaktivera.",
"select_none": "Avmarkera alla",
"search_for_apps": "Sök efter applikationer …",
"running": "Körs",
"service_log": "Logg för %s",
"postinstall_intro_1": "Grattis! YunoHost har installerats korrekt.",
"password_empty": "Lösenordsfältet är tomt",
"app_info_changelabel_desc": "Redigera applikationsetikett i portalen.",
"domain_dns_config": "DNS-inställningar",
"installation_complete": "Installation färdig",
"logs_app": "Applikationsloggar",
"port": "Port",
"app_debug_no_logs": "Det går inte att komma åt applikationens loggar",
"label_for_manifestname": "Etikett för %s",
"app_change_url": "Redigera länk",
"migrations_pending": "Kommande förflyttningar",
"infos": "Information",
"app_access_addall_desc": "Alla existerande användare kommer kunna komma åt %s.",
"domain_add_panel_with_domain": "Jag har redan ett domännamn …",
"domain_delete_longdesc": "Radera den här domänen",
"everyone_has_access": "Alla har åtkomst.",
"run": "Kör",
"hook_conf_ynh_certs": "SSL-certifikat",
"hook_conf_ynh_firewall": "Brandvägg",
"logged_out": "Utloggad",
"no_installed_apps": "Inga installerade applikationer.",
"fs_type": "Filsystem",
"mode": "Läge",
"password": "Lösenord",
"install_time": "Tidpunkt för installation",
"label": "Etikett",
"password_new": "Nytt lösenord",
"level": "nivå",
"passwords_too_short": "Lösenordet är för kort",
"hook_conf_nginx": "Nginx",
"logs_service": "Tjänstloggar",
"ipv6": "IPv6",
"manage_apps": "Hantera applikationer",
"service_description": "Beskrivning:",
"local_archives": "Lokala arkiv",
"install": "Installera",
"download": "Ladda ner",
"public_ip": "Offentlig IP-adress: ",
"no_user_to_add": "Inga fler användare att lägga till.",
"log": "Logg",
"open": "Öppen",
"hook_data_home_desc": "Användardata i /home/ANVÄNDARE",
"service_start_on_boot": "Kör vid uppstart: ",
"migrations_no_pending": "Inga kommande förflyttningar",
"read_more": "Läs mer",
"hook_conf_ssh": "SSH",
"domain_default_desc": "Standarddomänen är den domän du vill att användare loggar in på.",
"non_compatible_api": "Icke-kompatibelt API",
"loading": "Hämtar …",
"app_access": "Åtkomst",
"logs_context": "Sammanhang",
"hook_conf_xmpp": "XMPP",
"logs_error": "Fel",
"home": "Hem",
"logs_path": "Sökväg",
"add": "Lägg till",
"install_name": "Installera %s",
"domain_add_dns_doc": "… och jag har <a href='//yunohost.org/dns'>konfigurerat min DNS korrekt</a>.",
"interface": "Gränssnitt",
"error_server_unexpected": "Oväntat serverfel (%s)",
"previous": "Föregående",
"no_allowed_users": "Inga tillåtna användare.",
"read": "Läs",
"save": "Spara",
"hook_data_mail": "E-post",
"app_access_clearall_desc": "Alla användare kommer kunna komma åt %s.",
"hook_conf_ldap": "LDAP-databas",
"service_status": "Status: ",
"ok": "Ok",
"no_log": "Ingen logg.",
"migrations_done": "Tidigare förflyttningar",
"id": "ID",
"domain_name": "Domännamn",
"network": "Nätverk",
"logs_more": "Visa fler rader",
"domain_dns_longdesc": "Visa DNS-inställningar",
"domain_default": "Standarddomän",
"installed_apps": "Installerade applikationer",
"monitoring": "Övervakning",
"domain_add_panel_without_domain": "Jag har inte något domännamn …",
"monitoring_disabled": "Övervakning är inte aktiverad.",
"migrations_no_done": "Inga tidigare förflyttningar",
"logs": "Loggar",
"hostname": "Värdnamn",
"local_ip": "Lokal IP-adress",
"login": "Logga in",
"all_apps": "Alla applikationer",
"ports": "Portar",
"domain": "Domän",
"io": "I/O",
"path": "Sökväg",
"passwords_dont_match": "Lösenorden stämmer inte överens",
"path_url": "Sökväg",
"password_confirmation": "Lösenordsbekräftelse",
"app_debug_tab": "Visa information för felsökning",
"domain_visit": "Besök",
"logs_started_at": "Start",
"enabled": "Aktiverad",
"filesystem": "Filsystem",
"myserver": "minserver",
"menu": "Meny",
"manage_domains": "Hantera domäner",
"operations": "Handlingar",
"os": "Operativsystem",
"error_server": "Serverfel",
"refresh_app_list": "Uppdatera lista",
"form_input_example": "Exempel: %s",
"dns": "DNS"
}

View file

@ -1,97 +0,0 @@
<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">&hellip;</a>
<a href="#/apps/{{settings.id}}">{{settings.label}}</a>
<a href="#/apps/{{settings.id}}/access">{{t 'app_access'}}</a>
</div>
<div class="separator"></div>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title"><span class="fa-fw fa-users"></span> {{t 'allowed_users'}}</h2>
</div>
{{#if settings.allowed_users}}
<div class="list-group">
{{#each settings.allowed_users}}
<div class="list-group-item">
<a role="button" href="#/apps/{{settings.id}}/access/remove/{{username}}" class="btn btn-danger slide back pull-right">
<span class="fa-trash-o"></span> {{t 'remove_access'}}
</a>
<h3 class="list-group-item-heading">{{fullname}} ({{mail}})</h3>
<a href="#/users/{{username}}">{{t 'view_user_profile' username}}</a>
</div>
{{/each}}
</div>
{{else}}
<div class="panel-body">
{{#if settings.allow_everyone}}
<p class="text-success">{{t 'everyone_has_access'}}</p>
{{else}}
<p class="text-warning">{{t 'no_allowed_users'}}</p>
{{/if}}
</div>
{{/if}}
<div class="panel-footer">
{{#if users}}
<form method="POST" action="#/apps/{{settings.id}}/access/add" class="row">
<input type="hidden" name="app" value="{{settings.id}}">
<div class="col-sm-6">
<select name="user" required class="form-control">
<option value="" default disabled selected>{{t 'select_user'}}</option>
{{#users}}<option value="{{value}}">{{label}}</option>{{/users}}
</select>
</div>
<div class="col-sm-6">
<br class="visible-xs" />
<input type="submit" class="btn btn-success slide back" value="{{t 'add'}}">
</div>
</form>
{{else}}
<p class="text-warning">{{t 'no_user_to_add'}}</p>
{{/if}}
</div>
</div>
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
<span class="fa-fw fa-wrench"></span> {{t 'operations'}}
</a>
</h2>
</div>
<div id="collapseOne" class="panel-collapse collapse">
<div class="panel-body">
{{#if users}}
<div class="container">
<p>{{t 'app_access_addall_desc' settings.label}}</p>
<a role="button" href="#/apps/{{settings.id}}/access/add" class="btn btn-success slide back">
<span class="fa-plus"></span> {{t 'app_access_addall_btn'}}
</a>
</div>
<hr>
{{/if}}
{{#if settings.allowed_users}}
<div class="container">
<p>{{t 'app_access_removeall_desc' settings.label}}</p>
<a role="button" href="#/apps/{{settings.id}}/access/remove" class="btn btn-danger slide back">
<span class="fa-trash-o"></span> {{t 'app_access_removeall_btn'}}
</a>
</div>
<hr>
{{/if}}
{{#unless settings.allow_everyone}}
<div class="container">
<p>{{t 'app_access_clearall_desc' settings.label}}</p>
<a role="button" href="#/apps/{{settings.id}}/access/clear" class="btn btn-primary slide back">
<span class="fa-unlock-alt"></span> {{t 'app_access_clearall_btn'}}
</a>
</div>
{{/unless}}
</div>
</div>
</div>
</div>

View file

@ -48,9 +48,10 @@
</div>
<hr>
<div class="container">
<p>{{t 'app_info_access_desc' settings.allowed_users}}</p>
<a role="button" href="#/apps/{{settings.id}}/access" class="btn btn-info slide">
<span class="fa-lock"></span> {{t 'app_access'}}
<p>{{t 'app_info_access_desc'}} {{#each permissions}} {{ucwords .}}{{#unless @last}}, {{/unless}} {{ else }} {{t 'nobody'}} {{/each}}
</p>
<a role="button" href="#/groups" class="btn btn-info slide">
<span class="fa-key-modern"></span> {{t 'groups_and_permissions_manage'}}
</a>
</div>
<hr>

View 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="#/users" class="visible-xs">&hellip;</a>
<a href="#/users" class="hidden-xs">{{t 'users'}}</a>
<a href="#/groups" class="visible-xs">&hellip;</a>
<a href="#/groups" class="hidden-xs">{{t 'group_permissions'}}</a>
<a href="#/groups/create">{{t 'group_new'}}</a>
</div>
<div class="separator"></div>
<form action="#/groups/create" method="POST" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-body">
<div class="form-group">
<label for="groupname" class="col-sm-3 control-label">{{t 'group_name'}}</label>
<div class="col-sm-9">
<input type="text" id="groupname" name="groupname" class="form-control" placeholder="my group name" required pattern="[A-Za-z0-9_ ]+">
<div class="help-block">{{t 'group_format_name_help'}}</div>
</div>
</div>
</div>
</div>
<div class="text-center">
<input type="submit" role="button" class="btn btn-success slide back" value="{{t 'save'}}">
</div>
</form>

View file

@ -0,0 +1,134 @@
<div class="btn-breadcrumb">
<a href="#/"><i class="fa-home"></i><span class="sr-only">{{t 'home'}}</span></a>
<a href="#/users">{{t 'users'}}</a>
<a href="#/groups">{{t 'groups_and_permissions'}}</a>
</div>
<div class="actions-group">
<a role="button" href="#/groups/create" class="btn btn-success slide">
<span class="fa-plus"></span> {{t 'group_new'}}
</a>
</div>
<div class="separator"></div>
{{!-- ======================== Partial inline view ======================= --}}
{{#*inline "label"}}
<span class="label label-default label-removable">
<span class="fa-fw fa-{{icon}}"></span>
{{text}}
<a role="button" data-type="{{type}}s" data-operation="remove" data-item="{{value}}" data-group="{{group}}" class="group-update">
<span class="fa-close" style="margin-left:5px"></span>
<span class="sr-only">{{t 'delete'}}</span>
</a>
</span>
{{/inline}}
{{#*inline "labelsLine"}}
{{#each items}}
{{> label text=(call ../display .) value=. icon=../icon type=../type item=. group=../group}}
{{/each}}
{{#if inv}}
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="fa-plus"></span> {{t (concat 'group_add_' type)}}
</button>
<ul class="dropdown-menu">
{{#each inv}}
<li><a href="#" data-type="{{../type}}s" data-operation="add" data-item="{{.}}" data-group="{{../group}}" class="group-update">{{call ../display .}}</a></li>
{{/each}}
</ul>
</div>
{{/if}}
{{/inline}}
<div id="view-groups">
{{!-- ======================== Groups ======================= --}}
{{#each groups}}
{{#unless primary}}
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="heading-context-group-{{@key}}">
<h2 class="panel-title">
<a role="button" data-toggle="collapse" href="#collapse-group-{{@key}}" aria-expanded="false" aria-controls="collapse-group-{{@key}}">
<span class="fa-fw fa-group"></span> {{#if special}}{{t (concat 'group_' @key)}}{{else}}{{t 'group'}} "{{ucwords @key}}"{{/if}}
</a>
{{#unless special}}
<a href="#/groups/{{@key}}/delete" role="button" class="group-delete">
<span class="fa-close"></span>
<span class="sr-only">{{t 'delete'}}</span>
</a>
{{/unless}}
</h2>
</div>
<div id="collapse-group-{{@key}}" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading-context-group-{{@key}}">
<div class="panel-body">
<div class="row">
<div class="col-sm-2">
<h3>{{t 'users'}}</h3>
</div>
<div class="col-sm-10">
{{#if special}}
<div style="font-style:italic"><span class="fa-info-circle"></span> {{t (concat 'group_explain_' @key)}}</div>
{{else}}
{{> labelsLine display=../displayUser icon="user" type="member" items=members inv=membersInv group=@key}}
{{/if}}
</div>
</div>
<hr />
<div class="row">
<div class="col-sm-2">
<h3>{{t 'permissions'}}</h3>
</div>
<div class="col-sm-10">
{{> labelsLine display=../displayPermission icon="key-modern" type="permission" items=permissions inv=permissionsInv group=@key}}
</div>
</div>
</div>
</div>
</div>
{{/unless}}
{{/each}}
{{!-- ====================== User specific permissions ==================== --}}
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="heading-context-specific">
<h2 class="panel-title">
<a role="button" data-toggle="collapse" href="#collapse-specific" aria-expanded="false" aria-controls="collapse-specific">
<span class="fa-fw fa-group"></span> {{t 'group_specific_permissions'}}
</a>
</h2>
</div>
<div id="collapse-specific" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading-context-specific">
<div class="panel-body">
{{#each groups}}
{{#if (or (and primary permissions) display)}}
<div class="row">
<div class="col-sm-2">
<h3><span class="fa-fw fa-user"></span> {{@key}}</h3>
</div>
<div class="col-sm-10">
{{> labelsLine display=../displayPermission icon="key-modern" type="permission" items=permissions inv=permissionsInv group=@key}}
</div>
</div>
<hr />
{{/if}}
{{/each}}
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="fa-plus"></span> {{t 'group_add_member'}}
</button>
<ul class="dropdown-menu">
{{#each groups}}
{{#if primary}}
{{#unless (or permissions display)}}
<li><a href="#" data-user="{{@key}}" class="group-add-user">{{@key}}</a></li>
{{/unless}}
{{/if}}
{{/each}}
</ul>
</div>
</div>
</div>
</div>
</div>

View file

@ -4,6 +4,9 @@
</div>
<div class="actions-group">
<a href="#/groups" class="btn btn-info">
<span class="fa-key-modern"></span> {{t 'groups_and_permissions_manage'}}
</a>
<a role="button" href="#/users/create" class="btn btn-success slide">
<span class="fa-plus"></span> {{t 'users_new'}}
</a>