class Akismet_REST_API {
/**
* Register the REST API routes.
*/
public static function init() {
if ( ! function_exists( 'register_rest_route' ) ) {
// The REST API wasn't integrated into core until 4.4, and we support 4.0+ (for now).
return false;
}
register_rest_route( 'akismet/v1', '/key', array(
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_key' ),
), array(
'methods' => WP_REST_Server::EDITABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'set_key' ),
'args' => array(
'key' => array(
'required' => true,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
), array(
'methods' => WP_REST_Server::DELETABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'delete_key' ),
)
) );
register_rest_route( 'akismet/v1', '/settings/', array(
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_settings' ),
),
array(
'methods' => WP_REST_Server::EDITABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'set_boolean_settings' ),
'args' => array(
'akismet_strictness' => array(
'required' => false,
'type' => 'boolean',
'description' => __( 'If true, Akismet will automatically discard the worst spam automatically rather than putting it in the spam folder.', 'akismet' ),
),
'akismet_show_user_comments_approved' => array(
'required' => false,
'type' => 'boolean',
'description' => __( 'If true, show the number of approved comments beside each comment author in the comments list page.', 'akismet' ),
),
),
)
) );
register_rest_route( 'akismet/v1', '/stats', array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_stats' ),
'args' => array(
'interval' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_interval' ),
'description' => __( 'The time period for which to retrieve stats. Options: 60-days, 6-months, all', 'akismet' ),
'default' => 'all',
),
),
) );
register_rest_route( 'akismet/v1', '/stats/(?P[\w+])', array(
'args' => array(
'interval' => array(
'description' => __( 'The time period for which to retrieve stats. Options: 60-days, 6-months, all', 'akismet' ),
'type' => 'string',
),
),
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_stats' ),
)
) );
register_rest_route( 'akismet/v1', '/alert', array(
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_alert' ),
'args' => array(
'key' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
),
array(
'methods' => WP_REST_Server::EDITABLE,
'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'set_alert' ),
'args' => array(
'key' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
),
array(
'methods' => WP_REST_Server::DELETABLE,
'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'delete_alert' ),
'args' => array(
'key' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
)
) );
}
/**
* Get the current Akismet API key.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_key( $request = null ) {
return rest_ensure_response( Akismet::get_api_key() );
}
/**
* Set the API key, if possible.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function set_key( $request ) {
if ( defined( 'WPCOM_API_KEY' ) ) {
return rest_ensure_response( new WP_Error( 'hardcoded_key', __( 'This site\'s API key is hardcoded and cannot be changed via the API.', 'akismet' ), array( 'status'=> 409 ) ) );
}
$new_api_key = $request->get_param( 'key' );
if ( ! self::key_is_valid( $new_api_key ) ) {
return rest_ensure_response( new WP_Error( 'invalid_key', __( 'The value provided is not a valid and registered API key.', 'akismet' ), array( 'status' => 400 ) ) );
}
update_option( 'wordpress_api_key', $new_api_key );
return self::get_key();
}
/**
* Unset the API key, if possible.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function delete_key( $request ) {
if ( defined( 'WPCOM_API_KEY' ) ) {
return rest_ensure_response( new WP_Error( 'hardcoded_key', __( 'This site\'s API key is hardcoded and cannot be deleted.', 'akismet' ), array( 'status'=> 409 ) ) );
}
delete_option( 'wordpress_api_key' );
return rest_ensure_response( true );
}
/**
* Get the Akismet settings.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_settings( $request = null ) {
return rest_ensure_response( array(
'akismet_strictness' => ( get_option( 'akismet_strictness', '1' ) === '1' ),
'akismet_show_user_comments_approved' => ( get_option( 'akismet_show_user_comments_approved', '1' ) === '1' ),
) );
}
/**
* Update the Akismet settings.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function set_boolean_settings( $request ) {
foreach ( array(
'akismet_strictness',
'akismet_show_user_comments_approved',
) as $setting_key ) {
$setting_value = $request->get_param( $setting_key );
if ( is_null( $setting_value ) ) {
// This setting was not specified.
continue;
}
// From 4.7+, WP core will ensure that these are always boolean
// values because they are registered with 'type' => 'boolean',
// but we need to do this ourselves for prior versions.
$setting_value = Akismet_REST_API::parse_boolean( $setting_value );
update_option( $setting_key, $setting_value ? '1' : '0' );
}
return self::get_settings();
}
/**
* Parse a numeric or string boolean value into a boolean.
*
* @param mixed $value The value to convert into a boolean.
* @return bool The converted value.
*/
public static function parse_boolean( $value ) {
switch ( $value ) {
case true:
case 'true':
case '1':
case 1:
return true;
case false:
case 'false':
case '0':
case 0:
return false;
default:
return (bool) $value;
}
}
/**
* Get the Akismet stats for a given time period.
*
* Possible `interval` values:
* - all
* - 60-days
* - 6-months
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_stats( $request ) {
$api_key = Akismet::get_api_key();
$interval = $request->get_param( 'interval' );
$stat_totals = array();
$response = Akismet::http_post( Akismet::build_query( array( 'blog' => get_option( 'home' ), 'key' => $api_key, 'from' => $interval ) ), 'get-stats' );
if ( ! empty( $response[1] ) ) {
$stat_totals[$interval] = json_decode( $response[1] );
}
return rest_ensure_response( $stat_totals );
}
/**
* Get the current alert code and message. Alert codes are used to notify the site owner
* if there's a problem, like a connection issue between their site and the Akismet API,
* invalid requests being sent, etc.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_alert( $request ) {
return rest_ensure_response( array(
'code' => get_option( 'akismet_alert_code' ),
'message' => get_option( 'akismet_alert_msg' ),
) );
}
/**
* Update the current alert code and message by triggering a call to the Akismet server.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function set_alert( $request ) {
delete_option( 'akismet_alert_code' );
delete_option( 'akismet_alert_msg' );
// Make a request so the most recent alert code and message are retrieved.
Akismet::verify_key( Akismet::get_api_key() );
return self::get_alert( $request );
}
/**
* Clear the current alert code and message.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function delete_alert( $request ) {
delete_option( 'akismet_alert_code' );
delete_option( 'akismet_alert_msg' );
return self::get_alert( $request );
}
private static function key_is_valid( $key ) {
$response = Akismet::http_post(
Akismet::build_query(
array(
'key' => $key,
'blog' => get_option( 'home' )
)
),
'verify-key'
);
if ( $response[1] == 'valid' ) {
return true;
}
return false;
}
public static function privileged_permission_callback() {
return current_user_can( 'manage_options' );
}
/**
* For calls that Akismet.com makes to the site to clear outdated alert codes, use the API key for authorization.
*/
public static function remote_call_permission_callback( $request ) {
$local_key = Akismet::get_api_key();
return $local_key && ( strtolower( $request->get_param( 'key' ) ) === strtolower( $local_key ) );
}
public static function sanitize_interval( $interval, $request, $param ) {
$interval = trim( $interval );
$valid_intervals = array( '60-days', '6-months', 'all', );
if ( ! in_array( $interval, $valid_intervals ) ) {
$interval = 'all';
}
return $interval;
}
public static function sanitize_key( $key, $request, $param ) {
return trim( $key );
}
}
/**
* Traduction canadienne française (identique à la traduction française)
* @author Régis Guyomarch
* @author Benoit Delachaux
* @author Jonathan Grunder
* @version 2019-10-15
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(['elfinder'], factory);
} else if (typeof exports !== 'undefined') {
module.exports = factory(require('elfinder'));
} else {
factory(root.elFinder);
}
}(this, function(elFinder) {
elFinder.prototype.i18.fr_CA = {
translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>',
language : 'française',
direction : 'ltr',
dateFormat : 'd/M/Y H:i', // will show like: 15/Oct/2019 14:47
fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 14:47
nonameDateFormat : 'ymd-His', // noname upload will show like: 191015-144704
messages : {
/********************************** errors **********************************/
'error' : 'Erreur',
'errUnknown' : 'Erreur inconnue.',
'errUnknownCmd' : 'Commande inconnue.',
'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.',
'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.',
'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.',
'errAccess' : 'Accès refusé.',
'errConnect' : 'Impossible de se connecter au backend.',
'errAbort' : 'Connexion interrompue.',
'errTimeout' : 'Délai de connexion dépassé.',
'errNotFound' : 'Backend non trouvé.',
'errResponse' : 'Mauvaise réponse du backend.',
'errConf' : 'Mauvaise configuration du backend.',
'errJSON' : 'Le module PHP JSON n\'est pas installé.',
'errNoVolumes' : 'Aucun volume lisible.',
'errCmdParams' : 'Mauvais paramétrage de la commande "$1".',
'errDataNotJSON' : 'Les données ne sont pas au format JSON.',
'errDataEmpty' : 'Données inexistantes.',
'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.',
'errOpen' : 'Impossible d\'ouvrir "$1".',
'errNotFolder' : 'Cet objet n\'est pas un dossier.',
'errNotFile' : 'Cet objet n\'est pas un fichier.',
'errRead' : 'Impossible de lire "$1".',
'errWrite' : 'Impossible d\'écrire dans "$1".',
'errPerm' : 'Permission refusée.',
'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.',
'errExists' : 'Un élément nommé "$1" existe déjà.',
'errInvName' : 'Nom de fichier incorrect.',
'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Dossier non trouvé.',
'errFileNotFound' : 'Fichier non trouvé.',
'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.',
'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.',
'errMkdir' : 'Impossible de créer le dossier "$1".',
'errMkfile' : 'Impossible de créer le fichier "$1".',
'errRename' : 'Impossible de renommer "$1".',
'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".',
'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".',
'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015
'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon
'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload
'errUploadNoFiles' : 'Aucun fichier à envoyer.',
'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize
'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize
'errUploadMime' : 'Type de fichier non autorisé.',
'errUploadTransfer' : '"$1" erreur transfert.',
'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015
'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new
'errReplace' : 'Impossible de remplacer "$1".',
'errSave' : 'Impossible de sauvegarder "$1".',
'errCopy' : 'Impossible de copier "$1".',
'errMove' : 'Impossible de déplacer "$1".',
'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.',
'errRm' : 'Impossible de supprimer "$1".',
'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).',
'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".',
'errArchive' : 'Impossible de créer l\'archive.',
'errArcType' : 'Type d\'archive non supporté.',
'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.',
'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.',
'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.',
'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012
'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.',
'errResize' : 'Impossible de redimensionner "$1".',
'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013
'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013
'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013
'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013
'errUsupportType' : 'Type de fichier non supporté.',
'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011
'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012
'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012
'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012
'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012
'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.',
'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"',
'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"',
'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"',
'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"',
'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"',
'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"',
'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012
'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017
'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017
'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017
'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018
/******************************* commands names ********************************/
'cmdarchive' : 'Créer une archive',
'cmdback' : 'Précédent',
'cmdcopy' : 'Copier',
'cmdcut' : 'Couper',
'cmddownload' : 'Télécharger',
'cmdduplicate' : 'Dupliquer',
'cmdedit' : 'Éditer le fichier',
'cmdextract' : 'Extraire les fichiers de l\'archive',
'cmdforward' : 'Suivant',
'cmdgetfile' : 'Sélectionner les fichiers',
'cmdhelp' : 'À propos de ce logiciel',
'cmdhome' : 'Accueil',
'cmdinfo' : 'Informations',
'cmdmkdir' : 'Nouveau dossier',
'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016
'cmdmkfile' : 'Nouveau fichier',
'cmdopen' : 'Ouvrir',
'cmdpaste' : 'Coller',
'cmdquicklook' : 'Prévisualiser',
'cmdreload' : 'Actualiser',
'cmdrename' : 'Renommer',
'cmdrm' : 'Supprimer',
'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Trouver les fichiers',
'cmdup' : 'Remonter au dossier parent',
'cmdupload' : 'Envoyer les fichiers',
'cmdview' : 'Vue',
'cmdresize' : 'Redimensionner l\'image',
'cmdsort' : 'Trier',
'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012
'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012
'cmdplaces' : 'Vers Favoris', // added 28.12.2014
'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015
'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016
'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016
'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017
'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017
'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017
'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017
'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017
'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017
'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017
'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018
'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018
/*********************************** buttons ***********************************/
'btnClose' : 'Fermer',
'btnSave' : 'Sauvegarder',
'btnRm' : 'Supprimer',
'btnApply' : 'Confirmer',
'btnCancel' : 'Annuler',
'btnNo' : 'Non',
'btnYes' : 'Oui',
'btnDiscard': 'Discard changes',
'btnMount' : 'Monter', // added 18.04.2012
'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012
'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012
'btnConv' : 'Convertir', // from v2.1 added 08.04.2014
'btnCwd' : 'Ici', // from v2.1 added 22.5.2015
'btnVolume' : 'Volume', // from v2.1 added 22.5.2015
'btnAll' : 'Tous', // from v2.1 added 22.5.2015
'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015
'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015
'btnSaveClose': 'Enregistrer & Ferme', // from v2.1 added 12.6.2015
'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015
'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'Ouvrir le dossier',
'ntffile' : 'Ouvrir le fichier',
'ntfreload' : 'Actualiser le contenu du dossier',
'ntfmkdir' : 'Création du dossier',
'ntfmkfile' : 'Création des fichiers',
'ntfrm' : 'Supprimer les éléments',
'ntfcopy' : 'Copier les éléments',
'ntfmove' : 'Déplacer les éléments',
'ntfprepare' : 'Préparation de la copie des éléments',
'ntfrename' : 'Renommer les fichiers',
'ntfupload' : 'Envoi des fichiers',
'ntfdownload' : 'Téléchargement des fichiers',
'ntfsave' : 'Sauvegarder les fichiers',
'ntfarchive' : 'Création de l\'archive',
'ntfextract' : 'Extraction des fichiers de l\'archive',
'ntfsearch' : 'Recherche des fichiers',
'ntfresize' : 'Redimensionner les images',
'ntfsmth' : 'Fait quelque chose',
'ntfloadimg' : 'Chargement de l\'image',
'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012
'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012
'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013
'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013
'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014
'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015
'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015
'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017
'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017
'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017
'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018
/*********************************** volumes *********************************/
'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'Inconnue',
'Today' : 'Aujourd\'hui',
'Yesterday' : 'Hier',
'msJan' : 'Jan',
'msFeb' : 'Fév',
'msMar' : 'Mar',
'msApr' : 'Avr',
'msMay' : 'Mai',
'msJun' : 'Jun',
'msJul' : 'Jul',
'msAug' : 'Aoû',
'msSep' : 'Sep',
'msOct' : 'Oct',
'msNov' : 'Nov',
'msDec' : 'Déc',
'January' : 'Janvier',
'February' : 'Février',
'March' : 'Mars',
'April' : 'Avril',
'May' : 'Mai',
'June' : 'Juin',
'July' : 'Huillet',
'August' : 'Août',
'September' : 'Septembre',
'October' : 'Octobre',
'November' : 'Novembre',
'December' : 'Décembre',
'Sunday' : 'Dimanche',
'Monday' : 'Lundi',
'Tuesday' : 'Mardi',
'Wednesday' : 'Mercredi',
'Thursday' : 'Jeudi',
'Friday' : 'Vendredi',
'Saturday' : 'Samedi',
'Sun' : 'Dim',
'Mon' : 'Lun',
'Tue' : 'Mar',
'Wed' : 'Mer',
'Thu' : 'Jeu',
'Fri' : 'Ven',
'Sat' : 'Sam',
/******************************** sort variants ********************************/
'sortname' : 'par nom',
'sortkind' : 'par type',
'sortsize' : 'par taille',
'sortdate' : 'par date',
'sortFoldersFirst' : 'Dossiers en premier',
'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016
'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016
'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016
'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015
'untitled folder' : 'NouveauDossier', // added 10.11.2015
'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015
'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018
'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018
'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018
/********************************** messages **********************************/
'confirmReq' : 'Confirmation requise',
'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
Cela ne peut être annulé !',
'confirmRepl' : 'Supprimer l\'ancien fichier par le nouveau ?',
'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
Convertir en UTF-8 ?
Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Ce fichier a été modifié.
Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017
'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019
'apllyAll' : 'Appliquer à tous',
'name' : 'Nom',
'size' : 'Taille',
'perms' : 'Permissions',
'modify' : 'Modifié',
'kind' : 'Type',
'read' : 'Lecture',
'write' : 'Écriture',
'noaccess' : 'Pas d\'accès',
'and' : 'et',
'unknown' : 'inconnu',
'selectall' : 'Sélectionner tous les éléments',
'selectfiles' : 'Sélectionner le(s) élément(s)',
'selectffile' : 'Sélectionner le premier élément',
'selectlfile' : 'Sélectionner le dernier élément',
'viewlist' : 'Vue par liste',
'viewicons' : 'Vue par icônes',
'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018
'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018
'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018
'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018
'places' : 'Favoris',
'calc' : 'Calculer',
'path' : 'Chemin',
'aliasfor' : 'Raccourcis pour',
'locked' : 'Verrouiller',
'dim' : 'Dimensions',
'files' : 'Fichiers',
'folders' : 'Dossiers',
'items' : 'Éléments',
'yes' : 'oui',
'no' : 'non',
'link' : 'Lien',
'searcresult' : 'Résultats de la recherche',
'selected' : 'Éléments sélectionnés',
'about' : 'À propos',
'shortcuts' : 'Raccourcis',
'help' : 'Aide',
'webfm' : 'Gestionnaire de fichier Web',
'ver' : 'Version',
'protocolver' : 'Version du protocole',
'homepage' : 'Page du projet',
'docs' : 'Documentation',
'github' : 'Forkez-nous sur Github',
'twitter' : 'Suivez nous sur twitter',
'facebook' : 'Joignez-nous facebook',
'team' : 'Équipe',
'chiefdev' : 'Développeur en chef',
'developer' : 'Développeur',
'contributor' : 'Contributeur',
'maintainer' : 'Mainteneur',
'translator' : 'Traducteur',
'icons' : 'Icônes',
'dontforget' : 'et n\'oubliez pas votre serviette',
'shortcutsof' : 'Raccourcis désactivés',
'dropFiles' : 'Déposez les fichiers ici',
'or' : 'ou',
'selectForUpload' : 'Sélectionner les fichiers à envoyer',
'moveFiles' : 'Déplacer les éléments',
'copyFiles' : 'Copier les éléments',
'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Retirer des favoris',
'aspectRatio' : 'Ratio d’affichage',
'scale' : 'Mise à l\'échelle',
'width' : 'Largeur',
'height' : 'Hauteur',
'resize' : 'Redimensionner',
'crop' : 'Recadrer',
'rotate' : 'Rotation',
'rotate-cw' : 'Rotation de 90 degrés horaire',
'rotate-ccw' : 'Rotation de 90 degrés antihoraire',
'degree' : '°',
'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012
'protocol' : 'Protocole', // added 18.04.2012
'host' : 'Hôte', // added 18.04.2012
'port' : 'Port', // added 18.04.2012
'user' : 'Utilisateur', // added 18.04.2012
'pass' : 'Mot de passe', // added 18.04.2012
'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014
'encoding' : 'Encodage', // from v2.1 added 19.12.2014
'locale' : 'Encodage régional', // from v2.1 added 19.12.2014
'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015
'owner' : 'Propriétaire', // from v2.1 added 20.6.2015
'group' : 'Groupe', // from v2.1 added 20.6.2015
'other' : 'Autre', // from v2.1 added 20.6.2015
'execute' : 'Exécuter', // from v2.1 added 20.6.2015
'perm' : 'Permission', // from v2.1 added 20.6.2015
'mode' : 'Mode', // from v2.1 added 20.6.2015
'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015
'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015
'quality' : 'Qualité', // from v2.1.6 added 5.1.2016
'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016
'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016
'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016
'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016
'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016
'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016
'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016
'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016
'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016
'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016
'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016
'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016
'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016
'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016
'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016
'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016
'complete' : '$1 complété', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016
'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016
'8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016
'enabled' : 'Actif', // from v2.1.16 added 4.10.2016
'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Aucun résultat trouvé.\\AAppuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017
'presets' : 'Présélections', // from v2.1.25 added 26.5.2017
'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017
'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017
'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017
'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017
'preference' : 'Préférence', // from v2.1.26 added 28.6.2017
'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017
'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017
'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017
'charsLeft' : '... $1 caractères restants.', // from v2.1.29 added 30.8.2017
'sum' : 'Somme', // from v2.1.29 added 28.9.2017
'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017
'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017
'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017
'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017
'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017
'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017
'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
L\'action est définitive !', // from v2.1.31 added 4.12.2017
'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017
'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017
'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017
'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017
'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017
'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018
'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018
'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018
'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018
'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018
'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018
'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018
'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018
'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018
'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018
'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018
'all' : 'Tout', // from v2.1.38 added 4.4.2018
'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018
'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018
'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018
'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018
'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018
'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018
'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018
'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018
'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018
'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018
'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018
'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018
'add' : 'Add', // from v2.1.41 added 7.8.2018
'theme' : 'Theme', // from v2.1.43 added 19.10.2018
'default' : 'Default', // from v2.1.43 added 19.10.2018
'description' : 'Description', // from v2.1.43 added 19.10.2018
'website' : 'Website', // from v2.1.43 added 19.10.2018
'author' : 'Author', // from v2.1.43 added 19.10.2018
'email' : 'Email', // from v2.1.43 added 19.10.2018
'license' : 'License', // from v2.1.43 added 19.10.2018
'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018
'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019
'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019
/********************************** mimetypes **********************************/
'kindUnknown' : 'Inconnu',
'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016
'kindFolder' : 'Dossier',
'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017
'kindAlias' : 'Raccourci',
'kindAliasBroken' : 'Raccourci cassé',
// applications
'kindApp' : 'Application',
'kindPostscript' : 'Document Postscript',
'kindMsOffice' : 'Document Microsoft Office',
'kindMsWord' : 'Document Microsoft Word',
'kindMsExcel' : 'Document Microsoft Excel',
'kindMsPP' : 'Présentation Microsoft PowerPoint',
'kindOO' : 'Document OpenOffice',
'kindAppFlash' : 'Application Flash',
'kindPDF' : 'Portable Document Format (PDF)',
'kindTorrent' : 'Fichier BitTorrent',
'kind7z' : 'Archive 7z',
'kindTAR' : 'Archive TAR',
'kindGZIP' : 'Archive GZIP',
'kindBZIP' : 'Archive BZIP',
'kindXZ' : 'Archive XZ',
'kindZIP' : 'Archive ZIP',
'kindRAR' : 'Archive RAR',
'kindJAR' : 'Fichier Java JAR',
'kindTTF' : 'Police True Type',
'kindOTF' : 'Police Open Type',
'kindRPM' : 'Package RPM',
// fonts
'kindFont' : 'Police',
'kindSFNT' : 'Police SFNT',
'kindEOT' : 'Police Embedded Open Type',
'kindWOFF' : 'Police Web Open Font Format',
'kindWOFF2' : 'Police Web Open Font Format 2',
// texts
'kindText' : 'Document Text',
'kindTextPlain' : 'Texte non formaté',
'kindPHP' : 'Source PHP',
'kindCSS' : 'Feuille de style en cascade',
'kindHTML' : 'Document HTML',
'kindJS' : 'Source JavaScript',
'kindRTF' : 'Format de texte enrichi (Rich Text Format)',
'kindC' : 'Source C',
'kindCHeader' : 'Source header C',
'kindCPP' : 'Source C++',
'kindCPPHeader' : 'Source header C++',
'kindShell' : 'Shell script Unix',
'kindPython' : 'Source Python',
'kindJava' : 'Source Java',
'kindRuby' : 'Source Ruby',
'kindPerl' : 'Script Perl',
'kindSQL' : 'Source SQL',
'kindXML' : 'Document XML',
'kindAWK' : 'Source AWK',
'kindCSV' : 'CSV',
'kindDOCBOOK' : 'Document Docbook XML',
'kindMarkdown' : 'Markdown text', // added 20.7.2015
// images
'kindImage' : 'Image',
'kindBMP' : 'Image BMP',
'kindJPEG' : 'Image JPEG',
'kindGIF' : 'Image GIF',
'kindPNG' : 'Image PNG',
'kindTIFF' : 'Image TIFF',
'kindTGA' : 'Image TGA',
'kindPSD' : 'Image Adobe Photoshop',
'kindXBITMAP' : 'Image X bitmap',
'kindPXM' : 'Image Pixelmator',
// media
'kindAudio' : 'Son',
'kindAudioMPEG' : 'Son MPEG',
'kindAudioMPEG4' : 'Son MPEG-4',
'kindAudioMIDI' : 'Son MIDI',
'kindAudioOGG' : 'Son Ogg Vorbis',
'kindAudioWAV' : 'Son WAV',
'AudioPlaylist' : 'Liste de lecture audio',
'kindVideo' : 'Vidéo',
'kindVideoDV' : 'Vidéo DV',
'kindVideoMPEG' : 'Vidéo MPEG',
'kindVideoMPEG4' : 'Vidéo MPEG-4',
'kindVideoAVI' : 'Vidéo AVI',
'kindVideoMOV' : 'Vidéo Quick Time',
'kindVideoWM' : 'Vidéo Windows Media',
'kindVideoFlash' : 'Vidéo Flash',
'kindVideoMKV' : 'Vidéo Matroska',
'kindVideoOGG' : 'Vidéo Ogg'
}
};
}));
/**
* Polskie tłumaczenie
* @author Marcin Mikołajczyk
* @author Bogusław Zięba
* @version 2020-03-29
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(['elfinder'], factory);
} else if (typeof exports !== 'undefined') {
module.exports = factory(require('elfinder'));
} else {
factory(root.elFinder);
}
}(this, function(elFinder) {
elFinder.prototype.i18.pl = {
translator : 'Marcin Mikołajczyk <marcin@pjwstk.edu.pl>, Bogusław Zięba <bobi@poczta.fm>, Bogusław Zięba <bobi@poczta.fm>',
language : 'Polski',
direction : 'ltr',
dateFormat : 'd.m.Y H:i', // will show like: 29.03.2020 06:58
fancyDateFormat : '$1 H:i', // will show like: Dzisiaj 06:58
nonameDateFormat : 'ymd-His', // noname upload will show like: 200329-065813
messages : {
/********************************** errors **********************************/
'error' : 'Błąd',
'errUnknown' : 'Nieznany błąd.',
'errUnknownCmd' : 'Nieznane polecenie.',
'errJqui' : 'Niepoprawna konfiguracja jQuery UI. Muszą być zawarte komponenty selectable, draggable i droppable.',
'errNode' : 'elFinder wymaga utworzenia obiektu DOM.',
'errURL' : 'Niepoprawna konfiguracja elFinder! Pole URL nie jest ustawione.',
'errAccess' : 'Dostęp zabroniony.',
'errConnect' : 'Błąd połączenia z zapleczem.',
'errAbort' : 'Połączenie zostało przerwane.',
'errTimeout' : 'Upłynął czas oczekiwania na połączenie.',
'errNotFound' : 'Zaplecze nie zostało znalezione.',
'errResponse' : 'Nieprawidłowa odpowiedź zaplecza.',
'errConf' : 'Niepoprawna konfiguracja zaplecza.',
'errJSON' : 'Moduł PHP JSON nie jest zainstalowany.',
'errNoVolumes' : 'Brak możliwości odczytu katalogów.',
'errCmdParams' : 'Nieprawidłowe parametry dla polecenia "$1".',
'errDataNotJSON' : 'Dane nie są JSON.',
'errDataEmpty' : 'Dane są puste.',
'errCmdReq' : 'Zaplecze wymaga podania nazwy polecenia.',
'errOpen' : 'Nie można otworzyć "$1".',
'errNotFolder' : 'Obiekt nie jest katalogiem.',
'errNotFile' : 'Obiekt nie jest plikiem.',
'errRead' : 'Nie można odczytać "$1".',
'errWrite' : 'Nie można zapisać do "$1".',
'errPerm' : 'Brak uprawnień.',
'errLocked' : '"$1" jest zablokowany i nie może zostać zmieniony, przeniesiony lub usunięty.',
'errExists' : 'Plik "$1" już istnieje.',
'errInvName' : 'Nieprawidłowa nazwa pliku.',
'errInvDirname' : 'Nieprawidłowa nazwa folderu.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Nie znaleziono folderu.',
'errFileNotFound' : 'Plik nie został znaleziony.',
'errTrgFolderNotFound' : 'Katalog docelowy "$1" nie został znaleziony.',
'errPopup' : 'Przeglądarka zablokowała otwarcie nowego okna. Aby otworzyć plik, zmień ustawienia przeglądarki.',
'errMkdir' : 'Nie można utworzyć katalogu "$1".',
'errMkfile' : 'Nie można utworzyć pliku "$1".',
'errRename' : 'Nie można zmienić nazwy "$1".',
'errCopyFrom' : 'Kopiowanie z katalogu "$1" nie jest możliwe.',
'errCopyTo' : 'Kopiowanie do katalogu "$1" nie jest możliwe.',
'errMkOutLink' : 'Nie można utworzyć link do zewnętrznego katalogu głównego.', // from v2.1 added 03.10.2015
'errUpload' : 'Błąd wysyłania.', // old name - errUploadCommon
'errUploadFile' : 'Nie można wysłać "$1".', // old name - errUpload
'errUploadNoFiles' : 'Nie znaleziono plików do wysłania.',
'errUploadTotalSize' : 'Przekroczono dopuszczalny rozmiar wysyłanych plików.', // old name - errMaxSize
'errUploadFileSize' : 'Plik przekracza dopuszczalny rozmiar.', // old name - errFileMaxSize
'errUploadMime' : 'Niedozwolony typ pliku.',
'errUploadTransfer' : 'Błąd przesyłania "$1".',
'errUploadTemp' : 'Nie można wykonać tymczasowego pliku do przesłania.', // from v2.1 added 26.09.2015
'errNotReplace' : 'Obiekt "$1" istnieje już w tej lokalizacji i nie może być zastąpiony przez inny typ obiektu.', // new
'errReplace' : 'Nie można zastąpić "$1".',
'errSave' : 'Nie można zapisać "$1".',
'errCopy' : 'Nie można skopiować "$1".',
'errMove' : 'Nie można przenieść "$1".',
'errCopyInItself' : 'Nie można skopiować "$1" w miejsce jego samego.',
'errRm' : 'Nie można usunąć "$1".',
'errTrash' : 'Nie można do kosza.', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Nie należy usunąć pliku(s) źródłowy.',
'errExtract' : 'Nie można wypakować plików z "$1".',
'errArchive' : 'Nie można utworzyć archiwum.',
'errArcType' : 'Nieobsługiwany typ archiwum.',
'errNoArchive' : 'Plik nie jest prawidłowym typem archiwum.',
'errCmdNoSupport' : 'Zaplecze nie obsługuje tego polecenia.',
'errReplByChild' : 'Nie można zastąpić katalogu "$1" elementem w nim zawartym',
'errArcSymlinks' : 'Ze względów bezpieczeństwa rozpakowywanie archiwów zawierających dowiązania symboliczne (symlinks) jest niedozwolone.', // edited 24.06.2012
'errArcMaxSize' : 'Archiwum przekracza maksymalny dopuszczalny rozmiar.',
'errResize' : 'Nie można zmienić rozmiaru "$1".',
'errResizeDegree' : 'Nieprawidłowy stopień obracania.', // added 7.3.2013
'errResizeRotate' : 'Nie można obrócić obrazu.', // added 7.3.2013
'errResizeSize' : 'Nieprawidłowy rozmiar obrazu.', // added 7.3.2013
'errResizeNoChange' : 'Nie zmieniono rozmiaru obrazu.', // added 7.3.2013
'errUsupportType' : 'Nieobsługiwany typ pliku.',
'errNotUTF8Content' : 'Plik "$1" nie jest UTF-8 i nie może być edytowany.', // added 9.11.2011
'errNetMount' : 'Nie można zamontować "$1".', // added 17.04.2012
'errNetMountNoDriver' : 'Nieobsługiwany protokół.', // added 17.04.2012
'errNetMountFailed' : 'Montowanie nie powiodło się.', // added 17.04.2012
'errNetMountHostReq' : 'Host wymagany.', // added 18.04.2012
'errSessionExpires' : 'Twoja sesja wygasła z powodu nieaktywności.',
'errCreatingTempDir' : 'Nie można utworzyć katalogu tymczasowego: "$1"',
'errFtpDownloadFile' : 'Nie można pobrać pliku z FTP: "$1"',
'errFtpUploadFile' : 'Nie można przesłać pliku na serwer FTP: "$1"',
'errFtpMkdir' : 'Nie można utworzyć zdalnego katalogu FTP: "$1"',
'errArchiveExec' : 'Błąd podczas archiwizacji plików: "$1"',
'errExtractExec' : 'Błąd podczas wyodrębniania plików: "$1"',
'errNetUnMount' : 'Nie można odmontować', // from v2.1 added 30.04.2012
'errConvUTF8' : 'Nie wymienialne na UTF-8', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Wypróbuj Google Chrome, jeśli chcesz przesłać katalog.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Upłynął limit czasu podczas wyszukiwania "$1". Wynik wyszukiwania jest częściowy.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Wymagana jest ponowna autoryzacja.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Maks. liczba elementów do wyboru to $1.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Nie można przywrócić z kosza. Nie można zidentyfikować przywrócić docelowego.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Nie znaleziono edytora tego typu pliku.', // from v2.1.25 added 23.5.2017
'errServerError' : 'Wystąpił błąd po stronie serwera .', // from v2.1.25 added 16.6.2017
'errEmpty' : 'Nie można do pustego folderu "$1".', // from v2.1.25 added 22.6.2017
'moreErrors' : 'Jest jeszcze $1 błąd/błędy.', // from v2.1.44 added 9.12.2018
/******************************* commands names ********************************/
'cmdarchive' : 'Utwórz archiwum',
'cmdback' : 'Wstecz',
'cmdcopy' : 'Kopiuj',
'cmdcut' : 'Wytnij',
'cmddownload' : 'Pobierz',
'cmdduplicate' : 'Duplikuj',
'cmdedit' : 'Edytuj plik',
'cmdextract' : 'Wypakuj pliki z archiwum',
'cmdforward' : 'Dalej',
'cmdgetfile' : 'Wybierz pliki',
'cmdhelp' : 'Informacje o programie',
'cmdhome' : 'Główny',
'cmdinfo' : 'Właściwości',
'cmdmkdir' : 'Nowy katalog',
'cmdmkdirin' : 'Do nowego katalogu', // from v2.1.7 added 19.2.2016
'cmdmkfile' : 'Nowy plik',
'cmdopen' : 'Otwórz',
'cmdpaste' : 'Wklej',
'cmdquicklook' : 'Podgląd',
'cmdreload' : 'Odśwież',
'cmdrename' : 'Zmień nazwę',
'cmdrm' : 'Usuń',
'cmdtrash' : 'Do kosza', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Przywróć', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Wyszukaj pliki',
'cmdup' : 'Przejdź do katalogu nadrzędnego',
'cmdupload' : 'Wyślij pliki',
'cmdview' : 'Widok',
'cmdresize' : 'Zmień rozmiar i Obróć',
'cmdsort' : 'Sortuj',
'cmdnetmount' : 'Zamontuj wolumin sieciowy', // added 18.04.2012
'cmdnetunmount': 'Odmontuj', // from v2.1 added 30.04.2012
'cmdplaces' : 'Do Miejsc', // added 28.12.2014
'cmdchmod' : 'Zmiana trybu', // from v2.1 added 20.6.2015
'cmdopendir' : 'Otwórz katalog', // from v2.1 added 13.1.2016
'cmdcolwidth' : 'Resetuj szerokość kolumny', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Pełny ekran', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Przenieś', // from v2.1.15 added 21.08.2016
'cmdempty' : 'Opróżnij folder', // from v2.1.25 added 22.06.2017
'cmdundo' : 'Cofnij', // from v2.1.27 added 31.07.2017
'cmdredo' : 'Ponów', // from v2.1.27 added 31.07.2017
'cmdpreference': 'Preferencje', // from v2.1.27 added 03.08.2017
'cmdselectall' : 'Zaznacz wszystko', // from v2.1.28 added 15.08.2017
'cmdselectnone': 'Odznacz wszystko', // from v2.1.28 added 15.08.2017
'cmdselectinvert': 'Odwróć wybór', // from v2.1.28 added 15.08.2017
'cmdopennew' : 'Otwórz w nowym oknie', // from v2.1.38 added 3.4.2018
'cmdhide' : 'Ukryj (osobiste)', // from v2.1.41 added 24.7.2018
/*********************************** buttons ***********************************/
'btnClose' : 'Zamknij',
'btnSave' : 'Zapisz',
'btnRm' : 'Usuń',
'btnApply' : 'Zastosuj',
'btnCancel' : 'Anuluj',
'btnNo' : 'Nie',
'btnYes' : 'Tak',
'btnDiscard': 'Discard changes',
'btnMount' : 'Montuj', // added 18.04.2012
'btnApprove': 'Idź do $1 & zatwierdź', // from v2.1 added 26.04.2012
'btnUnmount': 'Odmontuj', // from v2.1 added 30.04.2012
'btnConv' : 'Konwertuj', // from v2.1 added 08.04.2014
'btnCwd' : 'Tutaj', // from v2.1 added 22.5.2015
'btnVolume' : 'Wolumin', // from v2.1 added 22.5.2015
'btnAll' : 'Wszystko', // from v2.1 added 22.5.2015
'btnMime' : 'Typ MIME', // from v2.1 added 22.5.2015
'btnFileName':'Nazwa pliku', // from v2.1 added 22.5.2015
'btnSaveClose': 'Zapisz & Zamknij', // from v2.1 added 12.6.2015
'btnBackup' : 'Kopia zapasowa', // fromv2.1 added 28.11.2015
'btnRename' : 'Zmień nazwę', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Zmień nazwę(Wszystkie)', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Poprz ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Nast ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Zapisz Jako', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'Otwieranie katalogu',
'ntffile' : 'Otwórz plik',
'ntfreload' : 'Odśwież zawartość katalogu',
'ntfmkdir' : 'Tworzenie katalogu',
'ntfmkfile' : 'Tworzenie plików',
'ntfrm' : 'Usuwanie plików',
'ntfcopy' : 'Kopiowanie plików',
'ntfmove' : 'Przenoszenie plików',
'ntfprepare' : 'Przygotowanie do kopiowania plików',
'ntfrename' : 'Zmiana nazw plików',
'ntfupload' : 'Wysyłanie plików',
'ntfdownload' : 'Pobieranie plików',
'ntfsave' : 'Zapisywanie plików',
'ntfarchive' : 'Tworzenie archiwum',
'ntfextract' : 'Wypakowywanie plików z archiwum',
'ntfsearch' : 'Wyszukiwanie plików',
'ntfresize' : 'Zmiana rozmiaru obrazów',
'ntfsmth' : 'Robienie czegoś >_<',
'ntfloadimg' : 'Ładowanie obrazu',
'ntfnetmount' : 'Montaż woluminu sieciowego', // added 18.04.2012
'ntfnetunmount': 'Odłączanie woluminu sieciowego', // from v2.1 added 30.04.2012
'ntfdim' : 'Pozyskiwanie wymiaru obrazu', // added 20.05.2013
'ntfreaddir' : 'Odczytywanie informacji katalogu', // from v2.1 added 01.07.2013
'ntfurl' : 'Pobieranie URL linku', // from v2.1 added 11.03.2014
'ntfchmod' : 'Zmiana trybu pliku', // from v2.1 added 20.6.2015
'ntfpreupload': 'Weryfikacja nazwy przesłanego pliku', // from v2.1 added 31.11.2015
'ntfzipdl' : 'Tworzenie pliku do pobrania', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Uzyskiwanie informacji o ścieżce', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Przetwarzanie przesłanego pliku', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Wykonuje wrzucanie do kosza', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Wykonuje przywracanie z kosza', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Sprawdzanie folderu docelowego', // from v2.1.24 added 3.5.2017
'ntfundo' : 'Cofanie poprzedniej operacji', // from v2.1.27 added 31.07.2017
'ntfredo' : 'Ponownie poprzednio cofnięte', // from v2.1.27 added 31.07.2017
'ntfchkcontent' : 'Sprawdzanie zawartości', // from v2.1.41 added 3.8.2018
/*********************************** volumes *********************************/
'volume_Trash' : 'Śmieci', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'nieznana',
'Today' : 'Dzisiaj',
'Yesterday' : 'Wczoraj',
'msJan' : 'Sty',
'msFeb' : 'Lut',
'msMar' : 'Mar',
'msApr' : 'Kwi',
'msMay' : 'Maj',
'msJun' : 'Cze',
'msJul' : 'Lip',
'msAug' : 'Sie',
'msSep' : 'Wrz',
'msOct' : 'Paź',
'msNov' : 'Lis',
'msDec' : 'Gru',
'January' : 'Styczeń',
'February' : 'Luty',
'March' : 'Marzec',
'April' : 'Kwiecień',
'May' : 'Maj',
'June' : 'Czerwiec',
'July' : 'Lipiec',
'August' : 'Sierpień',
'September' : 'Wrzesień',
'October' : 'Październik',
'November' : 'Listopad',
'December' : 'Grudzień',
'Sunday' : 'Niedziela',
'Monday' : 'Poniedziałek',
'Tuesday' : 'Wtorek',
'Wednesday' : 'Środa',
'Thursday' : 'Czwartek',
'Friday' : 'Piątek',
'Saturday' : 'Sobota',
'Sun' : 'Nie',
'Mon' : 'Pon',
'Tue' : 'Wto',
'Wed' : 'Śro',
'Thu' : 'Czw',
'Fri' : 'Pią',
'Sat' : 'Sob',
/******************************** sort variants ********************************/
'sortname' : 'w/g nazwy',
'sortkind' : 'w/g typu',
'sortsize' : 'w/g rozmiaru',
'sortdate' : 'w/g daty',
'sortFoldersFirst' : 'katalogi pierwsze',
'sortperm' : 'wg/nazwy', // from v2.1.13 added 13.06.2016
'sortmode' : 'wg/trybu', // from v2.1.13 added 13.06.2016
'sortowner' : 'wg/właściciela', // from v2.1.13 added 13.06.2016
'sortgroup' : 'wg/grup', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Również drzewa katalogów', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'NowyPlik.txt', // added 10.11.2015
'untitled folder' : 'NowyFolder', // added 10.11.2015
'Archive' : 'NoweArchiwum', // from v2.1 added 10.11.2015
'untitled file' : 'NowyPlik.$1', // from v2.1.41 added 6.8.2018
'extentionfile' : '$1 Plik', // from v2.1.41 added 6.8.2018
'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018
/********************************** messages **********************************/
'confirmReq' : 'Wymagane potwierdzenie',
'confirmRm' : 'Czy na pewno chcesz usunąć pliki?
Tej operacji nie można cofnąć!',
'confirmRepl' : 'Zastąpić stary plik nowym?',
'confirmRest' : 'Zamienić istniejący element na pozycję w koszu?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'Nie w UTF-8
Konwertować na UTF-8?
Zawartość stanie się UTF-8 poprzez zapisanie po konwersji.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Nie można wykryć kodowania tego pliku. Musi być tymczasowo przekształcony do UTF-8.
Proszę wybrać kodowanie znaków tego pliku.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Został zmodyfikowany.
Utracisz pracę, jeśli nie zapiszesz zmian.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Czy na pewno chcesz przenieść elementy do kosza?', //from v2.1.24 added 29.4.2017
'confirmMove' : 'Czy na pewno chcesz przenieść elementy do "$1"?', //from v2.1.50 added 27.7.2019
'apllyAll' : 'Zastosuj do wszystkich',
'name' : 'Nazwa',
'size' : 'Rozmiar',
'perms' : 'Uprawnienia',
'modify' : 'Zmodyfikowany',
'kind' : 'Typ',
'read' : 'odczyt',
'write' : 'zapis',
'noaccess' : 'brak dostępu',
'and' : 'i',
'unknown' : 'nieznany',
'selectall' : 'Zaznacz wszystkie pliki',
'selectfiles' : 'Zaznacz plik(i)',
'selectffile' : 'Zaznacz pierwszy plik',
'selectlfile' : 'Zaznacz ostatni plik',
'viewlist' : 'Widok listy',
'viewicons' : 'Widok ikon',
'viewSmall' : 'Małe ikony', // from v2.1.39 added 22.5.2018
'viewMedium' : 'Średnie ikony', // from v2.1.39 added 22.5.2018
'viewLarge' : 'Duże ikony', // from v2.1.39 added 22.5.2018
'viewExtraLarge' : 'Bardzo duże ikony', // from v2.1.39 added 22.5.2018
'places' : 'Ulubione',
'calc' : 'Obliczanie',
'path' : 'Ścieżka',
'aliasfor' : 'Alias do',
'locked' : 'Zablokowany',
'dim' : 'Wymiary',
'files' : 'Plik(ów)',
'folders' : 'Katalogi',
'items' : 'Element(ów)',
'yes' : 'tak',
'no' : 'nie',
'link' : 'Odnośnik',
'searcresult' : 'Wyniki wyszukiwania',
'selected' : 'zaznaczonych obiektów',
'about' : 'O programie',
'shortcuts' : 'Skróty klawiaturowe',
'help' : 'Pomoc',
'webfm' : 'Menedżer plików sieciowych',
'ver' : 'Wersja',
'protocolver' : 'wersja protokołu',
'homepage' : 'Strona projektu',
'docs' : 'Dokumentacja',
'github' : 'Obserwuj rozwój projektu na Github',
'twitter' : 'Śledź nas na Twitterze',
'facebook' : 'Dołącz do nas na Facebooku',
'team' : 'Zespół',
'chiefdev' : 'główny programista',
'developer' : 'programista',
'contributor' : 'współautor',
'maintainer' : 'koordynator',
'translator' : 'tłumacz',
'icons' : 'Ikony',
'dontforget' : 'i nie zapomnij zabrać ręcznika',
'shortcutsof' : 'Skróty klawiaturowe są wyłączone',
'dropFiles' : 'Upuść pliki tutaj',
'or' : 'lub',
'selectForUpload' : 'Wybierz pliki',
'moveFiles' : 'Przenieś pliki',
'copyFiles' : 'Kopiuj pliki',
'restoreFiles' : 'Przywróć elementy', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Usuń z miejsc',
'aspectRatio' : 'Zachowaj proporcje',
'scale' : 'Skala',
'width' : 'Szerokość',
'height' : 'Wysokość',
'resize' : 'Zmień rozmiar',
'crop' : 'Przytnij',
'rotate' : 'Obróć',
'rotate-cw' : 'Obróć 90° w lewo',
'rotate-ccw' : 'Obróć 90° w prawo',
'degree' : '°',
'netMountDialogTitle' : 'Montaż woluminu sieciowego', // added 18.04.2012
'protocol' : 'Protokół', // added 18.04.2012
'host' : 'Host', // added 18.04.2012
'port' : 'Port', // added 18.04.2012
'user' : 'Użytkownik', // added 18.04.2012
'pass' : 'Hasło', // added 18.04.2012
'confirmUnmount' : 'Czy chcesz odmontować $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Upuść lub Wklej pliki z przeglądarki', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Upuść lub Wklej tutaj pliki i adresy URL', // from v2.1 added 07.04.2014
'encoding' : 'Kodowanie', // from v2.1 added 19.12.2014
'locale' : 'Lokalne', // from v2.1 added 19.12.2014
'searchTarget' : 'Docelowo: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Wyszukiwanie poprzez wpisanie typu MIME', // from v2.1 added 22.5.2015
'owner' : 'Właściciel', // from v2.1 added 20.6.2015
'group' : 'Grupa', // from v2.1 added 20.6.2015
'other' : 'Inne', // from v2.1 added 20.6.2015
'execute' : 'Wykonaj', // from v2.1 added 20.6.2015
'perm' : 'Uprawnienia', // from v2.1 added 20.6.2015
'mode' : 'Tryb', // from v2.1 added 20.6.2015
'emptyFolder' : 'Katalog jest pusty', // from v2.1.6 added 30.12.2015
'emptyFolderDrop' : 'Katalog jest pusty\\AUpuść aby dodać pozycje', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Katalog jest pusty\\ADotknij dłużej aby dodać pozycje', // from v2.1.6 added 30.12.2015
'quality' : 'Jakość', // from v2.1.6 added 5.1.2016
'autoSync' : 'Auto synchronizacja', // from v2.1.6 added 10.1.2016
'moveUp' : 'Przenieś w górę', // from v2.1.6 added 18.1.2016
'getLink' : 'Pobierz URL linku', // from v2.1.7 added 9.2.2016
'selectedItems' : 'Wybrane pozycje ($1)', // from v2.1.7 added 2.19.2016
'folderId' : 'ID Katalogu', // from v2.1.10 added 3.25.2016
'offlineAccess' : 'Zezwól na dostęp offline', // from v2.1.10 added 3.25.2016
'reAuth' : 'Aby ponownie uwierzytelnić', // from v2.1.10 added 3.25.2016
'nowLoading' : 'Teraz ładuję...', // from v2.1.12 added 4.26.2016
'openMulti' : 'Otwieranie wielu plików', // from v2.1.12 added 5.14.2016
'openMultiConfirm': 'Próbujesz otworzyć $1 plików. Czy na pewno chcesz, aby otworzyć w przeglądarce?', // from v2.1.12 added 5.14.2016
'emptySearch' : 'Wynik wyszukiwania jest pusty', // from v2.1.12 added 5.16.2016
'editingFile' : 'Edytujesz plik.', // from v2.1.13 added 6.3.2016
'hasSelected' : 'Masz wybranych $1 pozycji.', // from v2.1.13 added 6.3.2016
'hasClipboard' : 'Masz $1 pozycji w schowku.', // from v2.1.13 added 6.3.2016
'incSearchOnly' : 'Wyszukiwanie przyrostowe jest wyłącznie z bieżącego widoku.', // from v2.1.13 added 6.30.2016
'reinstate' : 'Przywracanie', // from v2.1.15 added 3.8.2016
'complete' : '$1 zakończone', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Menu kontekstowe', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Obracanie strony', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Wolumin główny', // from v2.1.16 added 16.9.2016
'reset' : 'Resetuj', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Kolor tła', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Wybierania kolorów', // from v2.1.16 added 1.10.2016
'8pxgrid' : '8px Kratka', // from v2.1.16 added 4.10.2016
'enabled' : 'Włączone', // from v2.1.16 added 4.10.2016
'disabled' : 'Wyłączone', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Wyniki wyszukiwania są puste w bieżącym widoku.\\AWciśnij [Enter] aby poszerzyć zakres wyszukiwania.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Wyszukiwanie pierwszej litery brak wyników w bieżącym widoku.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Etykieta tekstowa', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 min pozostało', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Otwórz ponownie z wybranym kodowaniem', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Zapisz z wybranym kodowaniem', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Wybierz katalog', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'Wyszukiwanie pierwszej litery', // from v2.1.23 added 24.3.2017
'presets' : 'Wstępnie ustalone', // from v2.1.25 added 26.5.2017
'tooManyToTrash' : 'To zbyt wiele rzeczy, więc nie mogą być w koszu.', // from v2.1.25 added 9.6.2017
'TextArea' : 'PoleTekstowe', // from v2.1.25 added 14.6.2017
'folderToEmpty' : 'Opróżnij folder "$1".', // from v2.1.25 added 22.6.2017
'filderIsEmpty' : 'Brak elementów w folderze "$1".', // from v2.1.25 added 22.6.2017
'preference' : 'Preferencje', // from v2.1.26 added 28.6.2017
'language' : 'Ustawienie języka', // from v2.1.26 added 28.6.2017
'clearBrowserData': 'Zainicjuj ustawienia zapisane w tej przeglądarce', // from v2.1.26 added 28.6.2017
'toolbarPref' : 'Ustawienia paska narzędzi', // from v2.1.27 added 2.8.2017
'charsLeft' : '... pozostało $1 znak(ów).', // from v2.1.29 added 30.8.2017
'linesLeft' : '... pozostało $1 lini.', // from v2.1.52 added 16.1.2020
'sum' : 'Suma', // from v2.1.29 added 28.9.2017
'roughFileSize' : 'Przybliżony rozmiar pliku', // from v2.1.30 added 2.11.2017
'autoFocusDialog' : 'Skoncentruj się na elemencie dialogowym po najechaniu myszą', // from v2.1.30 added 2.11.2017
'select' : 'Wybierz', // from v2.1.30 added 23.11.2017
'selectAction' : 'Działanie po wybraniu pliku', // from v2.1.30 added 23.11.2017
'useStoredEditor' : 'Otwórz za pomocą ostatnio używanego edytora', // from v2.1.30 added 23.11.2017
'selectinvert' : 'Odwróć zaznaczenie', // from v2.1.30 added 25.11.2017
'renameMultiple' : 'Czy na pewno chcesz zmienić nazwę $1 wybranych elementów takich jak $2?
Tego nie da się cofnąć!', // from v2.1.31 added 4.12.2017
'batchRename' : 'Zmień partiami', // from v2.1.31 added 8.12.2017
'plusNumber' : '+ Liczba', // from v2.1.31 added 8.12.2017
'asPrefix' : 'Dodaj prefix', // from v2.1.31 added 8.12.2017
'asSuffix' : 'Dodaj suffix', // from v2.1.31 added 8.12.2017
'changeExtention' : 'Zmień rozszerzenie', // from v2.1.31 added 8.12.2017
'columnPref' : 'Ustawienia kolumn (Widok listy)', // from v2.1.32 added 6.2.2018
'reflectOnImmediate' : 'Wszystkie zmiany widoczne natychmiast w archiwum.', // from v2.1.33 added 2.3.2018
'reflectOnUnmount' : 'Wszelkie zmiany nie będą widoczne, dopóki nie odłączysz tego woluminu.', // from v2.1.33 added 2.3.2018
'unmountChildren' : 'Następujący wolumin (y), zamontowany na tym urządzeniu również niezamontowany. Czy na pewno chcesz go odmontować?', // from v2.1.33 added 5.3.2018
'selectionInfo' : 'Informacje Wyboru', // from v2.1.33 added 7.3.2018
'hashChecker' : 'Algorytmy do pokazywania hash pliku', // from v2.1.33 added 10.3.2018
'infoItems' : 'Info Elementów (Wybór Panelu Informacyjnego)', // from v2.1.38 added 28.3.2018
'pressAgainToExit': 'Naciśnij ponownie, aby wyjść.', // from v2.1.38 added 1.4.2018
'toolbar' : 'Pasek narzędziowy', // from v2.1.38 added 4.4.2018
'workspace' : 'Obszar Pracy', // from v2.1.38 added 4.4.2018
'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018
'all' : 'Wszystko', // from v2.1.38 added 4.4.2018
'iconSize' : 'Rozmiar Ikony (Podgląd ikon)', // from v2.1.39 added 7.5.2018
'editorMaximized' : 'Otwórz zmaksymalizowane okno edytora', // from v2.1.40 added 30.6.2018
'editorConvNoApi' : 'Ponieważ konwersja przez API nie jest obecnie dostępna, należy dokonać konwersji w witrynie.', //from v2.1.40 added 8.7.2018
'editorConvNeedUpload' : 'Po konwersji musisz przesłać z adresem URL pozycji lub pobranym plikiem, aby zapisać przekonwertowany plik.', //from v2.1.40 added 8.7.2018
'convertOn' : 'Konwertuj na stronie $1', // from v2.1.40 added 10.7.2018
'integrations' : 'Integracje', // from v2.1.40 added 11.7.2018
'integrationWith' : 'Ten elFinder ma zintegrowane następujące usługi zewnętrzne. Przed użyciem ich sprawdź warunki użytkowania, politykę prywatności itp.', // from v2.1.40 added 11.7.2018
'showHidden' : 'Pokaż ukryte pozycje', // from v2.1.41 added 24.7.2018
'hideHidden' : 'Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018
'toggleHidden' : 'Pokaż/Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018
'makefileTypes' : 'Typy plików, które można włączyć za pomocą "Nowy plik"', // from v2.1.41 added 7.8.2018
'typeOfTextfile' : 'Typ pliku tekstowego', // from v2.1.41 added 7.8.2018
'add' : 'Dodaj', // from v2.1.41 added 7.8.2018
'theme' : 'Motyw', // from v2.1.43 added 19.10.2018
'default' : 'Domyślnie', // from v2.1.43 added 19.10.2018
'description' : 'Opis', // from v2.1.43 added 19.10.2018
'website' : 'Witryna', // from v2.1.43 added 19.10.2018
'author' : 'Autor', // from v2.1.43 added 19.10.2018
'email' : 'E-mail', // from v2.1.43 added 19.10.2018
'license' : 'Licencja', // from v2.1.43 added 19.10.2018
'exportToSave' : 'Tego elementu nie można zapisać. Aby uniknąć utraty zmian, musisz wyeksportować go na swój komputer.', // from v2.1.44 added 1.12.2018
'dblclickToSelect': 'Kliknij dwukrotnie plik, aby go wybrać.', // from v2.1.47 added 22.1.2019
'useFullscreen' : 'Użyj trybu pełnoekranowego', // from v2.1.47 added 19.2.2019
/********************************** mimetypes **********************************/
'kindUnknown' : 'Nieznany',
'kindRoot' : 'Główny Wolumin', // from v2.1.16 added 16.10.2016
'kindFolder' : 'Katalog',
'kindSelects' : 'Zaznaczenie', // from v2.1.29 added 29.8.2017
'kindAlias' : 'Alias',
'kindAliasBroken' : 'Utracony alias',
// applications
'kindApp' : 'Aplikacja',
'kindPostscript' : 'Dokument Postscript',
'kindMsOffice' : 'Dokument Office',
'kindMsWord' : 'Dokument Word',
'kindMsExcel' : 'Dokument Excel',
'kindMsPP' : 'Prezentacja PowerPoint',
'kindOO' : 'Dokument OpenOffice',
'kindAppFlash' : 'Aplikacja Flash',
'kindPDF' : 'Dokument przenośny PDF',
'kindTorrent' : 'Plik BitTorrent',
'kind7z' : 'Archiwum 7z',
'kindTAR' : 'Archiwum TAR',
'kindGZIP' : 'Archiwum GZIP',
'kindBZIP' : 'Archiwum BZIP',
'kindXZ' : 'Archiwum XZ',
'kindZIP' : 'Archiwum ZIP',
'kindRAR' : 'Archiwum RAR',
'kindJAR' : 'Plik Java JAR',
'kindTTF' : 'Czcionka TrueType',
'kindOTF' : 'Czcionka OpenType',
'kindRPM' : 'Pakiet RPM',
// fonts
'kindFont' : 'Czcionka',
'kindSFNT' : 'Czcionka SFNT',
'kindEOT' : 'Czcionka Embedded Open Type',
'kindWOFF' : 'Czcionka Web Open Font Format',
'kindWOFF2' : 'Czcionka Web Open Font Format 2',
// texts
'kindText' : 'Dokument tekstowy',
'kindTextPlain' : 'Zwykły tekst',
'kindPHP' : 'Kod źródłowy PHP',
'kindCSS' : 'Kaskadowe arkusze stylów',
'kindHTML' : 'Dokument HTML',
'kindJS' : 'Kod źródłowy Javascript',
'kindRTF' : 'Tekst sformatowany RTF',
'kindC' : 'Kod źródłowy C',
'kindCHeader' : 'Plik nagłówka C',
'kindCPP' : 'Kod źródłowy C++',
'kindCPPHeader' : 'Plik nagłówka C++',
'kindShell' : 'Skrypt powłoki Unix',
'kindPython' : 'Kod źródłowy Python',
'kindJava' : 'Kod źródłowy Java',
'kindRuby' : 'Kod źródłowy Ruby',
'kindPerl' : 'Skrypt Perl',
'kindSQL' : 'Kod źródłowy SQL',
'kindXML' : 'Dokument XML',
'kindAWK' : 'Kod źródłowy AWK',
'kindCSV' : 'Tekst rozdzielany przecinkami CSV',
'kindDOCBOOK' : 'Dokument Docbook XML',
'kindMarkdown' : 'Tekst promocyjny', // added 20.7.2015
// images
'kindImage' : 'Obraz',
'kindBMP' : 'Obraz BMP',
'kindJPEG' : 'Obraz JPEG',
'kindGIF' : 'Obraz GIF',
'kindPNG' : 'Obraz PNG',
'kindTIFF' : 'Obraz TIFF',
'kindTGA' : 'Obraz TGA',
'kindPSD' : 'Obraz Adobe Photoshop',
'kindXBITMAP' : 'Obraz X BitMap',
'kindPXM' : 'Obraz Pixelmator',
// media
'kindAudio' : 'Plik dźwiękowy',
'kindAudioMPEG' : 'Plik dźwiękowy MPEG',
'kindAudioMPEG4' : 'Plik dźwiękowy MPEG-4',
'kindAudioMIDI' : 'Plik dźwiękowy MIDI',
'kindAudioOGG' : 'Plik dźwiękowy Ogg Vorbis',
'kindAudioWAV' : 'Plik dźwiękowy WAV',
'AudioPlaylist' : 'Lista odtwarzania MP3',
'kindVideo' : 'Plik wideo',
'kindVideoDV' : 'Plik wideo DV',
'kindVideoMPEG' : 'Plik wideo MPEG',
'kindVideoMPEG4' : 'Plik wideo MPEG-4',
'kindVideoAVI' : 'Plik wideo AVI',
'kindVideoMOV' : 'Plik wideo Quick Time',
'kindVideoWM' : 'Plik wideo Windows Media',
'kindVideoFlash' : 'Plik wideo Flash',
'kindVideoMKV' : 'Plik wideo Matroska',
'kindVideoOGG' : 'Plik wideo Ogg'
}
};
}));
.wpview-wrap.wp-mce-view-show-toolbar .toolbar {
display: block; }
.wpview-wrap .shortcake-error {
color: red;
font-weight: bold; }
.wpview-wrap .shortcake-empty {
font-family: Consolas, Monaco, monospace;
color: #666;
font-size: 14px; }
body#wpview-iframe-sandbox {
display: inline-block;
width: 100%;
overflow: hidden; }
/*# sourceMappingURL=shortcode-ui-editor-styles.css.map *//**
* française translation
* @author Régis Guyomarch
* @author Benoit Delachaux
* @author Jonathan Grunder
* @version 2023-04-16
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(['elfinder'], factory);
} else if (typeof exports !== 'undefined') {
module.exports = factory(require('elfinder'));
} else {
factory(root.elFinder);
}
}(this, function(elFinder) {
elFinder.prototype.i18.fr = {
translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>',
language : 'française',
direction : 'ltr',
dateFormat : 'd/M/Y H:i', // will show like: 16/Avr/2023 12:36
fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 12:36
nonameDateFormat : 'ymd-His', // noname upload will show like: 230416-123657
messages : {
/********************************** errors **********************************/
'error' : 'Erreur',
'errUnknown' : 'Erreur inconnue.',
'errUnknownCmd' : 'Commande inconnue.',
'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.',
'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.',
'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.',
'errAccess' : 'Accès refusé.',
'errConnect' : 'Impossible de se connecter au backend.',
'errAbort' : 'Connexion interrompue.',
'errTimeout' : 'Délai de connexion dépassé.',
'errNotFound' : 'Backend non trouvé.',
'errResponse' : 'Mauvaise réponse du backend.',
'errConf' : 'Mauvaise configuration du backend.',
'errJSON' : 'Le module PHP JSON n\'est pas installé.',
'errNoVolumes' : 'Aucun volume lisible.',
'errCmdParams' : 'Mauvais paramétrage de la commande "$1".',
'errDataNotJSON' : 'Les données ne sont pas au format JSON.',
'errDataEmpty' : 'Données inexistantes.',
'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.',
'errOpen' : 'Impossible d\'ouvrir "$1".',
'errNotFolder' : 'Cet objet n\'est pas un dossier.',
'errNotFile' : 'Cet objet n\'est pas un fichier.',
'errRead' : 'Impossible de lire "$1".',
'errWrite' : 'Impossible d\'écrire dans "$1".',
'errPerm' : 'Permission refusée.',
'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.',
'errExists' : 'Un élément nommé "$1" existe déjà.',
'errInvName' : 'Nom de fichier incorrect.',
'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Dossier non trouvé.',
'errFileNotFound' : 'Fichier non trouvé.',
'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.',
'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.',
'errMkdir' : 'Impossible de créer le dossier "$1".',
'errMkfile' : 'Impossible de créer le fichier "$1".',
'errRename' : 'Impossible de renommer "$1".',
'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".',
'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".',
'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015
'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon
'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload
'errUploadNoFiles' : 'Aucun fichier à envoyer.',
'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize
'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize
'errUploadMime' : 'Type de fichier non autorisé.',
'errUploadTransfer' : '"$1" erreur de transfert.',
'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015
'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new
'errReplace' : 'Impossible de remplacer "$1".',
'errSave' : 'Impossible de sauvegarder "$1".',
'errCopy' : 'Impossible de copier "$1".',
'errMove' : 'Impossible de déplacer "$1".',
'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.',
'errRm' : 'Impossible de supprimer "$1".',
'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).',
'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".',
'errArchive' : 'Impossible de créer l\'archive.',
'errArcType' : 'Type d\'archive non supporté.',
'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.',
'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.',
'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.',
'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012
'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.',
'errResize' : 'Impossible de redimensionner "$1".',
'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013
'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013
'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013
'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013
'errUsupportType' : 'Type de fichier non supporté.',
'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011
'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012
'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012
'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012
'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012
'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.',
'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"',
'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"',
'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"',
'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"',
'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"',
'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"',
'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012
'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015
'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017
'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017
'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017
'moreErrors' : 'Il y a encore $1 erreur(s).', // from v2.1.44 added 9.12.2018
'errMaxMkdirs' : 'Vous ne pouvez créer que $1 dossier au même moment.', // from v2.1.58 added 20.6.2021
/******************************* commands names ********************************/
'cmdarchive' : 'Créer une archive',
'cmdback' : 'Précédent',
'cmdcopy' : 'Copier',
'cmdcut' : 'Couper',
'cmddownload' : 'Télécharger',
'cmdduplicate' : 'Dupliquer',
'cmdedit' : 'Éditer le fichier',
'cmdextract' : 'Extraire les fichiers de l\'archive',
'cmdforward' : 'Suivant',
'cmdgetfile' : 'Sélectionner les fichiers',
'cmdhelp' : 'À propos de ce logiciel',
'cmdhome' : 'Accueil',
'cmdinfo' : 'Informations',
'cmdmkdir' : 'Nouveau dossier',
'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016
'cmdmkfile' : 'Nouveau fichier',
'cmdopen' : 'Ouvrir',
'cmdpaste' : 'Coller',
'cmdquicklook' : 'Prévisualiser',
'cmdreload' : 'Actualiser',
'cmdrename' : 'Renommer',
'cmdrm' : 'Supprimer',
'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Trouver les fichiers',
'cmdup' : 'Remonter au dossier parent',
'cmdupload' : 'Envoyer les fichiers',
'cmdview' : 'Vue',
'cmdresize' : 'Redimensionner l\'image',
'cmdsort' : 'Trier',
'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012
'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012
'cmdplaces' : 'Vers Favoris', // added 28.12.2014
'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015
'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016
'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016
'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017
'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017
'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017
'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017
'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017
'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017
'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017
'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018
'cmdhide' : 'Cacher (Préférence)', // from v2.1.41 added 24.7.2018
/*********************************** buttons ***********************************/
'btnClose' : 'Fermer',
'btnSave' : 'Enregistrer',
'btnRm' : 'Supprimer',
'btnApply' : 'Appliquer',
'btnCancel' : 'Annuler',
'btnNo' : 'Non',
'btnYes' : 'Oui',
'btnDiscard': 'Discard changes',
'btnMount' : 'Monter', // added 18.04.2012
'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012
'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012
'btnConv' : 'Convertir', // from v2.1 added 08.04.2014
'btnCwd' : 'Ici', // from v2.1 added 22.5.2015
'btnVolume' : 'Volume', // from v2.1 added 22.5.2015
'btnAll' : 'Tous', // from v2.1 added 22.5.2015
'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015
'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015
'btnSaveClose': 'Sauvegarder & Fermer', // from v2.1 added 12.6.2015
'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015
'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'Ouvrir le dossier',
'ntffile' : 'Ouvrir le fichier',
'ntfreload' : 'Actualiser le contenu du dossier',
'ntfmkdir' : 'Création du dossier',
'ntfmkfile' : 'Création des fichiers',
'ntfrm' : 'Supprimer les éléments',
'ntfcopy' : 'Copier les éléments',
'ntfmove' : 'Déplacer les éléments',
'ntfprepare' : 'Préparation de la copie des éléments',
'ntfrename' : 'Renommer les fichiers',
'ntfupload' : 'Envoi des fichiers',
'ntfdownload' : 'Téléchargement des fichiers',
'ntfsave' : 'Sauvegarder les fichiers',
'ntfarchive' : 'Création de l\'archive',
'ntfextract' : 'Extraction des fichiers de l\'archive',
'ntfsearch' : 'Recherche des fichiers',
'ntfresize' : 'Redimensionner les images',
'ntfsmth' : 'Fait quelque chose',
'ntfloadimg' : 'Chargement de l\'image',
'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012
'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012
'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013
'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013
'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014
'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015
'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015
'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017
'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017
'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017
'ntfchkcontent' : 'Vérification du contenu', // from v2.1.41 added 3.8.2018
/*********************************** volumes *********************************/
'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'Inconnue',
'Today' : 'Aujourd\'hui',
'Yesterday' : 'Hier',
'msJan' : 'Jan',
'msFeb' : 'Fév',
'msMar' : 'Mar',
'msApr' : 'Avr',
'msMay' : 'Mai',
'msJun' : 'Jun',
'msJul' : 'Jul',
'msAug' : 'Aoû',
'msSep' : 'Sep',
'msOct' : 'Oct',
'msNov' : 'Nov',
'msDec' : 'Déc',
'January' : 'Janvier',
'February' : 'Février',
'March' : 'Mars',
'April' : 'Avril',
'May' : 'Mai',
'June' : 'Juin',
'July' : 'Juillet',
'August' : 'Août',
'September' : 'Septembre',
'October' : 'Octobre',
'November' : 'Novembre',
'December' : 'Décembre',
'Sunday' : 'Dimanche',
'Monday' : 'Lundi',
'Tuesday' : 'Mardi',
'Wednesday' : 'Mercredi',
'Thursday' : 'Jeudi',
'Friday' : 'Vendredi',
'Saturday' : 'Samedi',
'Sun' : 'Dim',
'Mon' : 'Lun',
'Tue' : 'Mar',
'Wed' : 'Mer',
'Thu' : 'Jeu',
'Fri' : 'Ven',
'Sat' : 'Sam',
/******************************** sort variants ********************************/
'sortname' : 'par nom',
'sortkind' : 'par type',
'sortsize' : 'par taille',
'sortdate' : 'par date',
'sortFoldersFirst' : 'Dossiers en premier',
'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016
'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016
'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016
'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015
'untitled folder' : 'NouveauDossier', // added 10.11.2015
'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015
'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018
'extentionfile' : '$1: Fichier', // from v2.1.41 added 6.8.2018
'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018
/********************************** messages **********************************/
'confirmReq' : 'Confirmation requise',
'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
Cela ne peut être annulé !',
'confirmRepl' : 'Remplacer l\'ancien fichier par le nouveau ?',
'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
Convertir en UTF-8 ?
Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Ce fichier a été modifié.
Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017
'confirmMove' : 'Etes-vous sûr de vouloir déplacer ces éléments vers "$1"?', //from v2.1.50 added 27.7.2019
'apllyAll' : 'Appliquer à tous',
'name' : 'Nom',
'size' : 'Taille',
'perms' : 'Permissions',
'modify' : 'Modifié',
'kind' : 'Type',
'read' : 'Lecture',
'write' : 'Écriture',
'noaccess' : 'Pas d\'accès',
'and' : 'et',
'unknown' : 'inconnu',
'selectall' : 'Sélectionner tous les éléments',
'selectfiles' : 'Sélectionner le(s) élément(s)',
'selectffile' : 'Sélectionner le premier élément',
'selectlfile' : 'Sélectionner le dernier élément',
'viewlist' : 'Vue par liste',
'viewicons' : 'Vue par icônes',
'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018
'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018
'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018
'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018
'places' : 'Favoris',
'calc' : 'Calculer',
'path' : 'Chemin',
'aliasfor' : 'Raccourcis pour',
'locked' : 'Verrouiller',
'dim' : 'Dimensions',
'files' : 'Fichiers',
'folders' : 'Dossiers',
'items' : 'Éléments',
'yes' : 'oui',
'no' : 'non',
'link' : 'Lien',
'searcresult' : 'Résultats de la recherche',
'selected' : 'Éléments sélectionnés',
'about' : 'À propos',
'shortcuts' : 'Raccourcis',
'help' : 'Aide',
'webfm' : 'Gestionnaire de fichier Web',
'ver' : 'Version',
'protocolver' : 'Version du protocole',
'homepage' : 'Page du projet',
'docs' : 'Documentation',
'github' : 'Forkez-nous sur Github',
'twitter' : 'Suivez nous sur Twitter',
'facebook' : 'Joignez-nous sur Facebook',
'team' : 'Équipe',
'chiefdev' : 'Développeur en chef',
'developer' : 'Développeur',
'contributor' : 'Contributeur',
'maintainer' : 'Mainteneur',
'translator' : 'Traducteur',
'icons' : 'Icônes',
'dontforget' : 'et n\'oubliez pas votre serviette',
'shortcutsof' : 'Raccourcis désactivés',
'dropFiles' : 'Déposez les fichiers ici',
'or' : 'ou',
'selectForUpload' : 'Sélectionner les fichiers à envoyer',
'moveFiles' : 'Déplacer les éléments',
'copyFiles' : 'Copier les éléments',
'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Retirer des favoris',
'aspectRatio' : 'Ratio d’affichage',
'scale' : 'Mise à l\'échelle',
'width' : 'Largeur',
'height' : 'Hauteur',
'resize' : 'Redimensionner',
'crop' : 'Recadrer',
'rotate' : 'Rotation',
'rotate-cw' : 'Rotation de 90 degrés horaire',
'rotate-ccw' : 'Rotation de 90 degrés antihoraire',
'degree' : '°',
'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012
'protocol' : 'Protocole', // added 18.04.2012
'host' : 'Hôte', // added 18.04.2012
'port' : 'Port', // added 18.04.2012
'user' : 'Utilisateur', // added 18.04.2012
'pass' : 'Mot de passe', // added 18.04.2012
'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014
'encoding' : 'Encodage', // from v2.1 added 19.12.2014
'locale' : 'Encodage régional', // from v2.1 added 19.12.2014
'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015
'owner' : 'Propriétaire', // from v2.1 added 20.6.2015
'group' : 'Groupe', // from v2.1 added 20.6.2015
'other' : 'Autre', // from v2.1 added 20.6.2015
'execute' : 'Exécuter', // from v2.1 added 20.6.2015
'perm' : 'Permission', // from v2.1 added 20.6.2015
'mode' : 'Mode', // from v2.1 added 20.6.2015
'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015
'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015
'quality' : 'Qualité', // from v2.1.6 added 5.1.2016
'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016
'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016
'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016
'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016
'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016
'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016
'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016
'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016
'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016
'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016
'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016
'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016
'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016
'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016
'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016
'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016
'complete' : '$1 complété', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016
'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016
'8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016
'enabled' : 'Actif', // from v2.1.16 added 4.10.2016
'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Aucun résultat trouvé.\\Appuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017
'presets' : 'Présélections', // from v2.1.25 added 26.5.2017
'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017
'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017
'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017
'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017
'preference' : 'Préférences', // from v2.1.26 added 28.6.2017
'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017
'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017
'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017
'charsLeft' : '... $1 caractère(s) restant(s).', // from v2.1.29 added 30.8.2017
'linesLeft' : '... $1 ligne(s) restante(s).', // from v2.1.52 added 16.1.2020
'sum' : 'Somme', // from v2.1.29 added 28.9.2017
'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017
'autoFocusDialog' : 'Concentrez-vous sur l\'élément de dialogue avec le survol de la souris', // from v2.1.30 added 2.11.2017
'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017
'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017
'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017
'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017
'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
L\'action est définitive !', // from v2.1.31 added 4.12.2017
'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017
'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017
'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017
'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017
'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017
'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018
'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018
'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018
'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018
'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018
'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018
'infoItems' : 'Éléments d\'information (panneau de sélection d\'informations )', // from v2.1.38 added 28.3.2018
'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018
'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018
'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018
'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018
'all' : 'Tout', // from v2.1.38 added 4.4.2018
'iconSize' : 'Dimensions de l\'icône (Aperçu)', // from v2.1.39 added 7.5.2018
'editorMaximized' : 'Ouvrir la fenêtre d\'édition à la taille maximale', // from v2.1.40 added 30.6.2018
'editorConvNoApi' : 'Étant donné que la conversion par API n\'est pas disponible actuellement, veuillez effectuer la conversion sur le site Web.', //from v2.1.40 added 8.7.2018
'editorConvNeedUpload' : 'Après la conversion, vous devez ajouter l\'URL de l\'élément ou un fichier téléchargé pour enregistrer le fichier converti.', //from v2.1.40 added 8.7.2018
'convertOn' : 'Convertir sur le site de $1', // from v2.1.40 added 10.7.2018
'integrations' : 'Intégrations', // from v2.1.40 added 11.7.2018
'integrationWith' : 'Cet elFinder intègre les services externes suivants. Veuillez vérifier les conditions d\'utilisation, la politique de confidentialité, etc. avant de l\'utiliser.', // from v2.1.40 added 11.7.2018
'showHidden' : 'Afficher les élément cachés', // from v2.1.41 added 24.7.2018
'hideHidden' : 'Ne pas afficher les élément cachés', // from v2.1.41 added 24.7.2018
'toggleHidden' : 'Afficher/Cacher les éléments cachés', // from v2.1.41 added 24.7.2018
'makefileTypes' : 'Type de ficher autorisé avec "Nouveau fichier"', // from v2.1.41 added 7.8.2018
'typeOfTextfile' : 'Type du fichier de texte', // from v2.1.41 added 7.8.2018
'add' : 'Ajouter', // from v2.1.41 added 7.8.2018
'theme' : 'Thème', // from v2.1.43 added 19.10.2018
'default' : 'Par Défaut', // from v2.1.43 added 19.10.2018
'description' : 'Description', // from v2.1.43 added 19.10.2018
'website' : 'Site Web', // from v2.1.43 added 19.10.2018
'author' : 'Aauteur', // from v2.1.43 added 19.10.2018
'email' : 'E-mail', // from v2.1.43 added 19.10.2018
'license' : 'License', // from v2.1.43 added 19.10.2018
'exportToSave' : 'Cet élément ne peut être enregistrer. Pour éviter de perdre les modifications, vous devez exporter vers votre ordinateur.', // from v2.1.44 added 1.12.2018
'dblclickToSelect': 'Double-cliquez sur le fichier pour le sélectionner.', // from v2.1.47 added 22.1.2019
'useFullscreen' : 'Utiliser le mode plein écran', // from v2.1.47 added 19.2.2019
/********************************** mimetypes **********************************/
'kindUnknown' : 'Inconnu',
'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016
'kindFolder' : 'Dossier',
'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017
'kindAlias' : 'Raccourci',
'kindAliasBroken' : 'Raccourci cassé',
// applications
'kindApp' : 'Application',
'kindPostscript' : 'Document Postscript',
'kindMsOffice' : 'Document Microsoft Office',
'kindMsWord' : 'Document Microsoft Word',
'kindMsExcel' : 'Document Microsoft Excel',
'kindMsPP' : 'Présentation Microsoft PowerPoint',
'kindOO' : 'Document OpenOffice',
'kindAppFlash' : 'Application Flash',
'kindPDF' : 'Format de document portable (PDF)',
'kindTorrent' : 'Fichier BitTorrent',
'kind7z' : 'Archive 7z',
'kindTAR' : 'Archive TAR',
'kindGZIP' : 'Archive GZIP',
'kindBZIP' : 'Archive BZIP',
'kindXZ' : 'Archive XZ',
'kindZIP' : 'Archive ZIP',
'kindRAR' : 'Archive RAR',
'kindJAR' : 'Fichier Java JAR',
'kindTTF' : 'Police True Type',
'kindOTF' : 'Police Open Type',
'kindRPM' : 'Package RPM',
// fonts
'kindFont' : 'Police',
'kindSFNT' : 'Police font',
'kindEOT' : 'Police Embedded Open Type',
'kindWOFF' : 'Police Web Open Font Format',
'kindWOFF2' : 'Police Web Open Font Format 2',
// texts
'kindText' : 'Document Text',
'kindTextPlain' : 'Texte non formaté',
'kindPHP' : 'Source PHP',
'kindCSS' : 'Feuille de style en cascade',
'kindHTML' : 'Document HTML',
'kindJS' : 'Source JavaScript',
'kindRTF' : 'Format de texte enrichi (Rich Text Format)',
'kindC' : 'Source C',
'kindCHeader' : 'Source header C',
'kindCPP' : 'Source C++',
'kindCPPHeader' : 'Source header C++',
'kindShell' : 'Shell script Unix',
'kindPython' : 'Source Python',
'kindJava' : 'Source Java',
'kindRuby' : 'Source Ruby',
'kindPerl' : 'Script Perl',
'kindSQL' : 'Source SQL',
'kindXML' : 'Document XML',
'kindAWK' : 'Source AWK',
'kindCSV' : 'CSV',
'kindDOCBOOK' : 'Document Docbook XML',
'kindMarkdown' : 'Markdown text', // added 20.7.2015
// images
'kindImage' : 'Image',
'kindBMP' : 'Image BMP',
'kindJPEG' : 'Image JPEG',
'kindGIF' : 'Image GIF',
'kindPNG' : 'Image PNG',
'kindTIFF' : 'Image TIFF',
'kindTGA' : 'Image TGA',
'kindPSD' : 'Image Adobe Photoshop',
'kindXBITMAP' : 'Image X bitmap',
'kindPXM' : 'Image Pixelmator',
// media
'kindAudio' : 'Son',
'kindAudioMPEG' : 'Son MPEG',
'kindAudioMPEG4' : 'Son MPEG-4',
'kindAudioMIDI' : 'Son MIDI',
'kindAudioOGG' : 'Son Ogg Vorbis',
'kindAudioWAV' : 'Son WAV',
'AudioPlaylist' : 'Liste de lecture audio',
'kindVideo' : 'Vidéo',
'kindVideoDV' : 'Vidéo DV',
'kindVideoMPEG' : 'Vidéo MPEG',
'kindVideoMPEG4' : 'Vidéo MPEG-4',
'kindVideoAVI' : 'Vidéo AVI',
'kindVideoMOV' : 'Vidéo Quick Time',
'kindVideoWM' : 'Vidéo Windows Media',
'kindVideoFlash' : 'Vidéo Flash',
'kindVideoMKV' : 'Vidéo Matroska',
'kindVideoOGG' : 'Vidéo Ogg'
}
};
}));
/**
* Common functions.
*
* @package Yoast\WP\Duplicate_Post
* @since 2.0
*/
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\UI\Link_Builder;
use Yoast\WP\Duplicate_Post\Utils;
/**
* Tests if post type is enabled to be copied.
*
* @param string $post_type The post type to check.
* @return bool
*/
function duplicate_post_is_post_type_enabled( $post_type ) {
$duplicate_post_types_enabled = get_option( 'duplicate_post_types_enabled', [ 'post', 'page' ] );
if ( ! is_array( $duplicate_post_types_enabled ) ) {
$duplicate_post_types_enabled = [ $duplicate_post_types_enabled ];
}
/** This filter is documented in src/permissions-helper.php */
$duplicate_post_types_enabled = apply_filters( 'duplicate_post_enabled_post_types', $duplicate_post_types_enabled );
return in_array( $post_type, $duplicate_post_types_enabled, true );
}
/**
* Template tag to retrieve/display duplicate post link for post.
*
* @param int $id Optional. Post ID.
* @param string $context Optional, default to display. How to write the '&', defaults to '&'.
* @param bool $draft Optional, default to true.
* @return string
*/
function duplicate_post_get_clone_post_link( $id = 0, $context = 'display', $draft = true ) {
$post = get_post( $id );
if ( ! $post ) {
return '';
}
$link_builder = new Link_Builder();
$permissions_helper = new Permissions_Helper();
if ( ! $permissions_helper->should_links_be_displayed( $post ) ) {
return '';
}
if ( $draft ) {
return $link_builder->build_new_draft_link( $post, $context );
}
else {
return $link_builder->build_clone_link( $post, $context );
}
}
/**
* Displays duplicate post link for post.
*
* @param string|null $link Optional. Anchor text.
* @param string $before Optional. Display before edit link.
* @param string $after Optional. Display after edit link.
* @param int $id Optional. Post ID.
*/
function duplicate_post_clone_post_link( $link = null, $before = '', $after = '', $id = 0 ) {
$post = get_post( $id );
if ( ! $post ) {
return;
}
$url = duplicate_post_get_clone_post_link( $post->ID );
if ( ! $url ) {
return;
}
if ( $link === null ) {
$link = __( 'Copy to a new draft', 'duplicate-post' );
}
$link = '' . esc_html( $link ) . '';
/**
* Filter on the clone link HTML.
*
* @param string $link The full HTML tag of the link.
* @param int $ID The ID of the post.
*
* @return string
*/
echo $before . apply_filters( 'duplicate_post_clone_post_link', $link, $post->ID ) . $after; // phpcs:ignore WordPress.Security.EscapeOutput
}
/**
* Gets the original post.
*
* @param int|null $post Optional. Post ID or Post object.
* @param string $output Optional, default is Object. Either OBJECT, ARRAY_A, or ARRAY_N.
* @return mixed Post data.
*/
function duplicate_post_get_original( $post = null, $output = OBJECT ) {
return Utils::get_original( $post, $output );
}
if (!defined('ABSPATH')) die('No direct access.');
/**
* Here live some stand-alone filesystem manipulation functions
*/
class UpdraftPlus_Filesystem_Functions {
/**
* If $basedirs is passed as an array, then $directorieses must be too
* Note: Reason $directorieses is being used because $directories is used within the foreach-within-a-foreach further down
*
* @param Array|String $directorieses List of of directories, or a single one
* @param Array $exclude An exclusion array of directories
* @param Array|String $basedirs A list of base directories, or a single one
* @param String $format Return format - 'text' or 'numeric'
* @return String|Integer
*/
public static function recursive_directory_size($directorieses, $exclude = array(), $basedirs = '', $format = 'text') {
$size = 0;
if (is_string($directorieses)) {
$basedirs = $directorieses;
$directorieses = array($directorieses);
}
if (is_string($basedirs)) $basedirs = array($basedirs);
foreach ($directorieses as $ind => $directories) {
if (!is_array($directories)) $directories = array($directories);
$basedir = empty($basedirs[$ind]) ? $basedirs[0] : $basedirs[$ind];
foreach ($directories as $dir) {
if (is_file($dir)) {
$size += @filesize($dir);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
} else {
$suffix = ('' != $basedir) ? ((0 === strpos($dir, $basedir.'/')) ? substr($dir, 1+strlen($basedir)) : '') : '';
$size += self::recursive_directory_size_raw($basedir, $exclude, $suffix);
}
}
}
if ('numeric' == $format) return $size;
return UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size);
}
/**
* Ensure that WP_Filesystem is instantiated and functional. Otherwise, outputs necessary HTML and dies.
*
* @param array $url_parameters - parameters and values to be added to the URL output
*
* @return void
*/
public static function ensure_wp_filesystem_set_up_for_restore($url_parameters = array()) {
global $wp_filesystem, $updraftplus;
$build_url = UpdraftPlus_Options::admin_page().'?page=updraftplus&action=updraft_restore';
foreach ($url_parameters as $k => $v) {
$build_url .= '&'.$k.'='.$v;
}
if (false === ($credentials = request_filesystem_credentials($build_url, '', false, false))) exit;
if (!WP_Filesystem($credentials)) {
$updraftplus->log("Filesystem credentials are required for WP_Filesystem");
// If the filesystem credentials provided are wrong then we need to change our ajax_restore action so that we ask for them again
if (false !== strpos($build_url, 'updraftplus_ajax_restore=do_ajax_restore')) $build_url = str_replace('updraftplus_ajax_restore=do_ajax_restore', 'updraftplus_ajax_restore=continue_ajax_restore', $build_url);
request_filesystem_credentials($build_url, '', true, false);
if ($wp_filesystem->errors->get_error_code()) {
echo '';
exit;
}
}
}
/**
* Get the html of "Web-server disk space" line which resides above of the existing backup table
*
* @param Boolean $will_immediately_calculate_disk_space Whether disk space should be counted now or when user click Refresh link
*
* @return String Web server disk space html to render
*/
public static function web_server_disk_space($will_immediately_calculate_disk_space = true) {
if ($will_immediately_calculate_disk_space) {
$disk_space_used = self::get_disk_space_used('updraft', 'numeric');
if ($disk_space_used > apply_filters('updraftplus_display_usage_line_threshold_size', 104857600)) { // 104857600 = 100 MB = (100 * 1024 * 1024)
$disk_space_text = UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($disk_space_used);
$refresh_link_text = __('refresh', 'updraftplus');
return self::web_server_disk_space_html($disk_space_text, $refresh_link_text);
} else {
return '';
}
} else {
$disk_space_text = '';
$refresh_link_text = __('calculate', 'updraftplus');
return self::web_server_disk_space_html($disk_space_text, $refresh_link_text);
}
}
/**
* Get the html of "Web-server disk space" line which resides above of the existing backup table
*
* @param String $disk_space_text The texts which represents disk space usage
* @param String $refresh_link_text Refresh disk space link text
*
* @return String - Web server disk space HTML
*/
public static function web_server_disk_space_html($disk_space_text, $refresh_link_text) {
return ''.__('Web-server disk space in use by UpdraftPlus', 'updraftplus').': '.$disk_space_text.' '.$refresh_link_text.'';
}
/**
* Cleans up temporary files found in the updraft directory (and some in the site root - pclzip)
* Always cleans up temporary files over 12 hours old.
* With parameters, also cleans up those.
* Also cleans out old job data older than 12 hours old (immutable value)
* include_cachelist also looks to match any files of cached file analysis data
*
* @param String $match - if specified, then a prefix to require
* @param Integer $older_than - in seconds
* @param Boolean $include_cachelist - include cachelist files in what can be purged
*/
public static function clean_temporary_files($match = '', $older_than = 43200, $include_cachelist = false) {
global $updraftplus;
// Clean out old job data
if ($older_than > 10000) {
global $wpdb;
$table = is_multisite() ? $wpdb->sitemeta : $wpdb->options;
$key_column = is_multisite() ? 'meta_key' : 'option_name';
$value_column = is_multisite() ? 'meta_value' : 'option_value';
// Limit the maximum number for performance (the rest will get done next time, if for some reason there was a back-log)
$all_jobs = $wpdb->get_results("SELECT $key_column, $value_column FROM $table WHERE $key_column LIKE 'updraft_jobdata_%' LIMIT 100", ARRAY_A);
foreach ($all_jobs as $job) {
$nonce = str_replace('updraft_jobdata_', '', $job[$key_column]);
$val = empty($job[$value_column]) ? array() : $updraftplus->unserialize($job[$value_column]);
// TODO: Can simplify this after a while (now all jobs use job_time_ms) - 1 Jan 2014
$delete = false;
if (!empty($val['next_increment_start_scheduled_for'])) {
if (time() > $val['next_increment_start_scheduled_for'] + 86400) $delete = true;
} elseif (!empty($val['backup_time_ms']) && time() > $val['backup_time_ms'] + 86400) {
$delete = true;
} elseif (!empty($val['job_time_ms']) && time() > $val['job_time_ms'] + 86400) {
$delete = true;
} elseif (!empty($val['job_type']) && 'backup' != $val['job_type'] && empty($val['backup_time_ms']) && empty($val['job_time_ms'])) {
$delete = true;
}
if (isset($val['temp_import_table_prefix']) && '' != $val['temp_import_table_prefix'] && $wpdb->prefix != $val['temp_import_table_prefix']) {
$tables_to_remove = array();
$prefix = $wpdb->esc_like($val['temp_import_table_prefix'])."%";
$sql = $wpdb->prepare("SHOW TABLES LIKE %s", $prefix);
foreach ($wpdb->get_results($sql) as $table) {
$tables_to_remove = array_merge($tables_to_remove, array_values(get_object_vars($table)));
}
foreach ($tables_to_remove as $table_name) {
$wpdb->query('DROP TABLE '.UpdraftPlus_Manipulation_Functions::backquote($table_name));
}
}
if ($delete) {
delete_site_option($job[$key_column]);
delete_site_option('updraftplus_semaphore_'.$nonce);
}
}
}
$updraft_dir = $updraftplus->backups_dir_location();
$now_time = time();
$files_deleted = 0;
$include_cachelist = defined('DOING_CRON') && DOING_CRON && doing_action('updraftplus_clean_temporary_files') ? true : $include_cachelist;
if ($handle = opendir($updraft_dir)) {
while (false !== ($entry = readdir($handle))) {
$manifest_match = preg_match("/updraftplus-manifest\.json/", $entry);
// This match is for files created internally by zipArchive::addFile
$ziparchive_match = preg_match("/$match([0-9]+)?\.zip\.tmp\.(?:[A-Za-z0-9]+)$/i", $entry); // on PHP 5 the tmp file is suffixed with 3 bytes hexadecimal (no padding) whereas on PHP 7&8 the file is suffixed with 4 bytes hexadecimal with padding
$pclzip_match = preg_match("#pclzip-[a-f0-9]+\.(?:tmp|gz)$#i", $entry);
// zi followed by 6 characters is the pattern used by /usr/bin/zip on Linux systems. It's safe to check for, as we have nothing else that's going to match that pattern.
$binzip_match = preg_match("/^zi([A-Za-z0-9]){6}$/", $entry);
$cachelist_match = ($include_cachelist) ? preg_match("/-cachelist-.*(?:info|\.tmp)$/i", $entry) : false;
$browserlog_match = preg_match('/^log\.[0-9a-f]+-browser\.txt$/', $entry);
$downloader_client_match = preg_match("/$match([0-9]+)?\.zip\.tmp\.(?:[A-Za-z0-9]+)\.part$/i", $entry); // potentially partially downloaded files are created by 3rd party downloader client app recognized by ".part" extension at the end of the backup file name (e.g. .zip.tmp.3b9r8r.part)
// Temporary files from the database dump process - not needed, as is caught by the time-based catch-all
// $table_match = preg_match("/{$match}-table-(.*)\.table(\.tmp)?\.gz$/i", $entry);
// The gz goes in with the txt, because we *don't* want to reap the raw .txt files
if ((preg_match("/$match\.(tmp|table|txt\.gz)(\.gz)?$/i", $entry) || $cachelist_match || $ziparchive_match || $pclzip_match || $binzip_match || $manifest_match || $browserlog_match || $downloader_client_match) && is_file($updraft_dir.'/'.$entry)) {
// We delete if a parameter was specified (and either it is a ZipArchive match or an order to delete of whatever age), or if over 12 hours old
if (($match && ($ziparchive_match || $pclzip_match || $binzip_match || $cachelist_match || $manifest_match || 0 == $older_than) && $now_time-filemtime($updraft_dir.'/'.$entry) >= $older_than) || $now_time-filemtime($updraft_dir.'/'.$entry)>43200) {
$skip_dblog = (0 == $files_deleted % 25) ? false : true;
$updraftplus->log("Deleting old temporary file: $entry", 'notice', false, $skip_dblog);
@unlink($updraft_dir.'/'.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist.
$files_deleted++;
}
} elseif (preg_match('/^log\.[0-9a-f]+\.txt$/', $entry) && $now_time-filemtime($updraft_dir.'/'.$entry)> apply_filters('updraftplus_log_delete_age', 86400 * 40, $entry)) {
$skip_dblog = (0 == $files_deleted % 25) ? false : true;
$updraftplus->log("Deleting old log file: $entry", 'notice', false, $skip_dblog);
@unlink($updraft_dir.'/'.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist.
$files_deleted++;
}
}
@closedir($handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
}
// Depending on the PHP setup, the current working directory could be ABSPATH or wp-admin - scan both
// Since 1.9.32, we set them to go into $updraft_dir, so now we must check there too. Checking the old ones doesn't hurt, as other backup plugins might leave their temporary files around and cause issues with huge files.
foreach (array(ABSPATH, ABSPATH.'wp-admin/', $updraft_dir.'/') as $path) {
if ($handle = opendir($path)) {
while (false !== ($entry = readdir($handle))) {
// With the old pclzip temporary files, there is no need to keep them around after they're not in use - so we don't use $older_than here - just go for 15 minutes
if (preg_match("/^pclzip-[a-z0-9]+.tmp$/", $entry) && $now_time-filemtime($path.$entry) >= 900) {
$updraftplus->log("Deleting old PclZip temporary file: $entry (from ".basename($path).")");
@unlink($path.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist.
}
}
@closedir($handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
}
}
}
/**
* Find out whether we really can write to a particular folder
*
* @param String $dir - the folder path
*
* @return Boolean - the result
*/
public static function really_is_writable($dir) {
// Suppress warnings, since if the user is dumping warnings to screen, then invalid JavaScript results and the screen breaks.
if (!@is_writable($dir)) return false;// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
// Found a case - GoDaddy server, Windows, PHP 5.2.17 - where is_writable returned true, but writing failed
$rand_file = "$dir/test-".md5(rand().time()).".txt";
while (file_exists($rand_file)) {
$rand_file = "$dir/test-".md5(rand().time()).".txt";
}
$ret = @file_put_contents($rand_file, 'testing...');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
@unlink($rand_file);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist.
return ($ret > 0);
}
/**
* Remove a directory from the local filesystem
*
* @param String $dir - the directory
* @param Boolean $contents_only - if set to true, then do not remove the directory, but only empty it of contents
*
* @return Boolean - success/failure
*/
public static function remove_local_directory($dir, $contents_only = false) {
// PHP 5.3+ only
// foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $path) {
// $path->isFile() ? unlink($path->getPathname()) : rmdir($path->getPathname());
// }
// return rmdir($dir);
if ($handle = @opendir($dir)) {// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
while (false !== ($entry = readdir($handle))) {
if ('.' !== $entry && '..' !== $entry) {
if (is_dir($dir.'/'.$entry)) {
self::remove_local_directory($dir.'/'.$entry, false);
} else {
@unlink($dir.'/'.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist.
}
}
}
@closedir($handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
}
return $contents_only ? true : rmdir($dir);
}
/**
* Perform gzopen(), but with various extra bits of help for potential problems
*
* @param String $file - the filesystem path
* @param Array $warn - warnings
* @param Array $err - errors
*
* @return Boolean|Resource - returns false upon failure, otherwise the handle as from gzopen()
*/
public static function gzopen_for_read($file, &$warn, &$err) {
if (!function_exists('gzopen') || !function_exists('gzread')) {
$missing = '';
if (!function_exists('gzopen')) $missing .= 'gzopen';
if (!function_exists('gzread')) $missing .= ($missing) ? ', gzread' : 'gzread';
$err[] = sprintf(__("Your web server's PHP installation has these functions disabled: %s.", 'updraftplus'), $missing).' '.sprintf(__('Your hosting company must enable these functions before %s can work.', 'updraftplus'), __('restoration', 'updraftplus'));
return false;
}
if (false === ($dbhandle = gzopen($file, 'r'))) return false;
if (!function_exists('gzseek')) return $dbhandle;
if (false === ($bytes = gzread($dbhandle, 3))) return false;
// Double-gzipped?
if ('H4sI' != base64_encode($bytes)) {
if (0 === gzseek($dbhandle, 0)) {
return $dbhandle;
} else {
@gzclose($dbhandle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
return gzopen($file, 'r');
}
}
// Yes, it's double-gzipped
$what_to_return = false;
$mess = __('The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver.', 'updraftplus');
$messkey = 'doublecompress';
$err_msg = '';
if (false === ($fnew = fopen($file.".tmp", 'w')) || !is_resource($fnew)) {
@gzclose($dbhandle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
$err_msg = __('The attempt to undo the double-compression failed.', 'updraftplus');
} else {
@fwrite($fnew, $bytes);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
$emptimes = 0;
while (!gzeof($dbhandle)) {
$bytes = @gzread($dbhandle, 262144);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
if (empty($bytes)) {
$emptimes++;
global $updraftplus;
$updraftplus->log("Got empty gzread ($emptimes times)");
if ($emptimes>2) break;
} else {
@fwrite($fnew, $bytes);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
}
}
gzclose($dbhandle);
fclose($fnew);
// On some systems (all Windows?) you can't rename a gz file whilst it's gzopened
if (!rename($file.".tmp", $file)) {
$err_msg = __('The attempt to undo the double-compression failed.', 'updraftplus');
} else {
$mess .= ' '.__('The attempt to undo the double-compression succeeded.', 'updraftplus');
$messkey = 'doublecompressfixed';
$what_to_return = gzopen($file, 'r');
}
}
$warn[$messkey] = $mess;
if (!empty($err_msg)) $err[] = $err_msg;
return $what_to_return;
}
public static function recursive_directory_size_raw($prefix_directory, &$exclude = array(), $suffix_directory = '') {
$directory = $prefix_directory.('' == $suffix_directory ? '' : '/'.$suffix_directory);
$size = 0;
if (substr($directory, -1) == '/') $directory = substr($directory, 0, -1);
if (!file_exists($directory) || !is_dir($directory) || !is_readable($directory)) return -1;
if (file_exists($directory.'/.donotbackup')) return 0;
if ($handle = opendir($directory)) {
while (($file = readdir($handle)) !== false) {
if ('.' != $file && '..' != $file) {
$spath = ('' == $suffix_directory) ? $file : $suffix_directory.'/'.$file;
if (false !== ($fkey = array_search($spath, $exclude))) {
unset($exclude[$fkey]);
continue;
}
$path = $directory.'/'.$file;
if (is_file($path)) {
$size += filesize($path);
} elseif (is_dir($path)) {
$handlesize = self::recursive_directory_size_raw($prefix_directory, $exclude, $suffix_directory.('' == $suffix_directory ? '' : '/').$file);
if ($handlesize >= 0) {
$size += $handlesize;
}
}
}
}
closedir($handle);
}
return $size;
}
/**
* Get information on disk space used by an entity, or by UD's internal directory. Returns as a human-readable string.
*
* @param String $entity - the entity (e.g. 'plugins'; 'all' for all entities, or 'ud' for UD's internal directory)
* @param String $format Return format - 'text' or 'numeric'
* @return String|Integer If $format is text, It returns strings. Otherwise integer value.
*/
public static function get_disk_space_used($entity, $format = 'text') {
global $updraftplus;
if ('updraft' == $entity) return self::recursive_directory_size($updraftplus->backups_dir_location(), array(), '', $format);
$backupable_entities = $updraftplus->get_backupable_file_entities(true, false);
if ('all' == $entity) {
$total_size = 0;
foreach ($backupable_entities as $entity => $data) {
// Might be an array
$basedir = $backupable_entities[$entity];
$dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir);
$size = self::recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir, 'numeric');
if (is_numeric($size) && $size>0) $total_size += $size;
}
if ('numeric' == $format) {
return $total_size;
} else {
return UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($total_size);
}
} elseif (!empty($backupable_entities[$entity])) {
// Might be an array
$basedir = $backupable_entities[$entity];
$dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir);
return self::recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir, $format);
}
// Default fallback
return apply_filters('updraftplus_get_disk_space_used_none', __('Error', 'updraftplus'), $entity, $backupable_entities);
}
/**
* Unzips a specified ZIP file to a location on the filesystem via the WordPress
* Filesystem Abstraction. Forked from WordPress core in version 5.1-alpha-44182,
* to allow us to provide feedback on progress.
*
* Assumes that WP_Filesystem() has already been called and set up. Does not extract
* a root-level __MACOSX directory, if present.
*
* Attempts to increase the PHP memory limit before uncompressing. However,
* the most memory required shouldn't be much larger than the archive itself.
*
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
*
* @param String $file - Full path and filename of ZIP archive.
* @param String $to - Full path on the filesystem to extract archive to.
* @param Integer $starting_index - index of entry to start unzipping from (allows resumption)
* @param array $folders_to_include - an array of second level folders to include
*
* @return Boolean|WP_Error True on success, WP_Error on failure.
*/
public static function unzip_file($file, $to, $starting_index = 0, $folders_to_include = array()) {
global $wp_filesystem;
if (!$wp_filesystem || !is_object($wp_filesystem)) {
return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
}
// Unzip can use a lot of memory, but not this much hopefully.
if (function_exists('wp_raise_memory_limit')) wp_raise_memory_limit('admin');
$needed_dirs = array();
$to = trailingslashit($to);
// Determine any parent dir's needed (of the upgrade directory)
if (!$wp_filesystem->is_dir($to)) { // Only do parents if no children exist
$path = preg_split('![/\\\]!', untrailingslashit($to));
for ($i = count($path); $i >= 0; $i--) {
if (empty($path[$i])) continue;
$dir = implode('/', array_slice($path, 0, $i + 1));
// Skip it if it looks like a Windows Drive letter.
if (preg_match('!^[a-z]:$!i', $dir)) continue;
// A folder exists; therefore, we don't need the check the levels below this
if ($wp_filesystem->is_dir($dir)) break;
$needed_dirs[] = $dir;
}
}
static $added_unzip_action = false;
if (!$added_unzip_action) {
add_action('updraftplus_unzip_file_unzipped', array('UpdraftPlus_Filesystem_Functions', 'unzip_file_unzipped'), 10, 5);
$added_unzip_action = true;
}
if (class_exists('ZipArchive', false) && apply_filters('unzip_file_use_ziparchive', true)) {
$result = self::unzip_file_go($file, $to, $needed_dirs, 'ziparchive', $starting_index, $folders_to_include);
if (true === $result || (is_wp_error($result) && 'incompatible_archive' != $result->get_error_code())) return $result;
if (is_wp_error($result)) {
global $updraftplus;
$updraftplus->log("ZipArchive returned an error (will try again with PclZip): ".$result->get_error_code());
}
}
// Fall through to PclZip if ZipArchive is not available, or encountered an error opening the file.
// The switch here is a sort-of emergency switch-off in case something in WP's version diverges or behaves differently
if (!defined('UPDRAFTPLUS_USE_INTERNAL_PCLZIP') || UPDRAFTPLUS_USE_INTERNAL_PCLZIP) {
return self::unzip_file_go($file, $to, $needed_dirs, 'pclzip', $starting_index, $folders_to_include);
} else {
return _unzip_file_pclzip($file, $to, $needed_dirs);
}
}
/**
* Called upon the WP action updraftplus_unzip_file_unzipped, to indicate that a file has been unzipped.
*
* @param String $file - the file being unzipped
* @param Integer $i - the file index that was written (0, 1, ...)
* @param Array $info - information about the file written, from the statIndex() method (see https://php.net/manual/en/ziparchive.statindex.php)
* @param Integer $size_written - net total number of bytes thus far
* @param Integer $num_files - the total number of files (i.e. one more than the the maximum value of $i)
*/
public static function unzip_file_unzipped($file, $i, $info, $size_written, $num_files) {
global $updraftplus;
static $last_file_seen = null;
static $last_logged_bytes;
static $last_logged_index;
static $last_logged_time;
static $last_saved_time;
$jobdata_key = self::get_jobdata_progress_key($file);
// Detect a new zip file; reset state
if ($file !== $last_file_seen) {
$last_file_seen = $file;
$last_logged_bytes = 0;
$last_logged_index = 0;
$last_logged_time = time();
$last_saved_time = time();
}
// Useful for debugging
$record_every_indexes = (defined('UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES') && UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES > 0) ? UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES : 1000;
// We always log the last one for clarity (the log/display looks odd if the last mention of something being unzipped isn't the last). Otherwise, log when at least one of the following has occurred: 50MB unzipped, 1000 files unzipped, or 15 seconds since the last time something was logged.
if ($i >= $num_files -1 || $size_written > $last_logged_bytes + 100 * 1048576 || $i > $last_logged_index + $record_every_indexes || time() > $last_logged_time + 15) {
$updraftplus->jobdata_set($jobdata_key, array('index' => $i, 'info' => $info, 'size_written' => $size_written));
$updraftplus->log(sprintf(__('Unzip progress: %d out of %d files', 'updraftplus').' (%s, %s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice-restore');
$updraftplus->log(sprintf('Unzip progress: %d out of %d files (%s, %s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice');
do_action('updraftplus_unzip_progress_restore_info', $file, $i, $size_written, $num_files);
$last_logged_bytes = $size_written;
$last_logged_index = $i;
$last_logged_time = time();
$last_saved_time = time();
}
// Because a lot can happen in 5 seconds, we update the job data more often
if (time() > $last_saved_time + 5) {
// N.B. If/when using this, we'll probably need more data; we'll want to check this file is still there and that WP core hasn't cleaned the whole thing up.
$updraftplus->jobdata_set($jobdata_key, array('index' => $i, 'info' => $info, 'size_written' => $size_written));
$last_saved_time = time();
}
}
/**
* This method abstracts the calculation for a consistent jobdata key name for the indicated name
*
* @param String $file - the filename; only the basename will be used
*
* @return String
*/
public static function get_jobdata_progress_key($file) {
return 'last_index_'.md5(basename($file));
}
/**
* Compatibility function (exists in WP 4.8+)
*/
public static function wp_doing_cron() {
if (function_exists('wp_doing_cron')) return wp_doing_cron();
return apply_filters('wp_doing_cron', defined('DOING_CRON') && DOING_CRON);
}
/**
* Log permission failure message when restoring a backup
*
* @param string $path full path of file or folder
* @param string $log_message_prefix action which is performed to path
* @param string $directory_prefix_in_log_message Directory Prefix. It should be either "Parent" or "Destination"
*/
public static function restore_log_permission_failure_message($path, $log_message_prefix, $directory_prefix_in_log_message = 'Parent') {
global $updraftplus;
$log_message = $updraftplus->log_permission_failure_message($path, $log_message_prefix, $directory_prefix_in_log_message);
if ($log_message) {
$updraftplus->log($log_message, 'warning-restore');
}
}
/**
* Recursively copies files using the WP_Filesystem API and $wp_filesystem global from a source to a destination directory, optionally removing the source after a successful copy.
*
* @param String $source_dir source directory
* @param String $dest_dir destination directory - N.B. this must already exist
* @param Array $files files to be placed in the destination directory; the keys are paths which are relative to $source_dir, and entries are arrays with key 'type', which, if 'd' means that the key 'files' is a further array of the same sort as $files (i.e. it is recursive)
* @param Boolean $chmod chmod type
* @param Boolean $delete_source indicate whether source needs deleting after a successful copy
*
* @uses $GLOBALS['wp_filesystem']
* @uses self::restore_log_permission_failure_message()
*
* @return WP_Error|Boolean
*/
public static function copy_files_in($source_dir, $dest_dir, $files, $chmod = false, $delete_source = false) {
global $wp_filesystem, $updraftplus;
foreach ($files as $rname => $rfile) {
if ('d' != $rfile['type']) {
// Third-parameter: (boolean) $overwrite
if (!$wp_filesystem->move($source_dir.'/'.$rname, $dest_dir.'/'.$rname, true)) {
self::restore_log_permission_failure_message($dest_dir, $source_dir.'/'.$rname.' -> '.$dest_dir.'/'.$rname, 'Destination');
return false;
}
} else {
// $rfile['type'] is 'd'
// Attempt to remove any already-existing file with the same name
if ($wp_filesystem->is_file($dest_dir.'/'.$rname)) @$wp_filesystem->delete($dest_dir.'/'.$rname, false, 'f');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- if fails, carry on
// No such directory yet: just move it
if ($wp_filesystem->exists($dest_dir.'/'.$rname) && !$wp_filesystem->is_dir($dest_dir.'/'.$rname) && !$wp_filesystem->move($source_dir.'/'.$rname, $dest_dir.'/'.$rname, false)) {
self::restore_log_permission_failure_message($dest_dir, 'Move '.$source_dir.'/'.$rname.' -> '.$dest_dir.'/'.$rname, 'Destination');
$updraftplus->log_e('Failed to move directory (check your file permissions and disk quota): %s', $source_dir.'/'.$rname." -> ".$dest_dir.'/'.$rname);
return false;
} elseif (!empty($rfile['files'])) {
if (!$wp_filesystem->exists($dest_dir.'/'.$rname)) $wp_filesystem->mkdir($dest_dir.'/'.$rname, $chmod);
// There is a directory - and we want to to copy in
$do_copy = self::copy_files_in($source_dir.'/'.$rname, $dest_dir.'/'.$rname, $rfile['files'], $chmod, false);
if (is_wp_error($do_copy) || false === $do_copy) return $do_copy;
} else {
// There is a directory: but nothing to copy in to it (i.e. $file['files'] is empty). Just remove the directory.
@$wp_filesystem->rmdir($source_dir.'/'.$rname);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the method.
}
}
}
// We are meant to leave the working directory empty. Hence, need to rmdir() once a directory is empty. But not the root of it all in case of others/wpcore.
if ($delete_source || false !== strpos($source_dir, '/')) {
if (!$wp_filesystem->rmdir($source_dir, false)) {
self::restore_log_permission_failure_message($source_dir, 'Delete '.$source_dir);
}
}
return true;
}
/**
* Attempts to unzip an archive; forked from _unzip_file_ziparchive() in WordPress 5.1-alpha-44182, and modified to use the UD zip classes.
*
* Assumes that WP_Filesystem() has already been called and set up.
*
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
*
* @param String $file - full path and filename of ZIP archive.
* @param String $to - full path on the filesystem to extract archive to.
* @param Array $needed_dirs - a partial list of required folders needed to be created.
* @param String $method - either 'ziparchive' or 'pclzip'.
* @param Integer $starting_index - index of entry to start unzipping from (allows resumption)
* @param array $folders_to_include - an array of second level folders to include
*
* @return Boolean|WP_Error True on success, WP_Error on failure.
*/
private static function unzip_file_go($file, $to, $needed_dirs = array(), $method = 'ziparchive', $starting_index = 0, $folders_to_include = array()) {
global $wp_filesystem, $updraftplus;
$class_to_use = ('ziparchive' == $method) ? 'UpdraftPlus_ZipArchive' : 'UpdraftPlus_PclZip';
if (!class_exists($class_to_use)) updraft_try_include_file('includes/class-zip.php', 'require_once');
$updraftplus->log('Unzipping '.basename($file).' to '.$to.' using '.$class_to_use.', starting index '.$starting_index);
$z = new $class_to_use;
$flags = (version_compare(PHP_VERSION, '5.2.12', '>') && defined('ZIPARCHIVE::CHECKCONS')) ? ZIPARCHIVE::CHECKCONS : 4;
// This is just for crazy people with mbstring.func_overload enabled (deprecated from PHP 7.2)
// This belongs somewhere else
// if ('UpdraftPlus_PclZip' == $class_to_use) mbstring_binary_safe_encoding();
// if ('UpdraftPlus_PclZip' == $class_to_use) reset_mbstring_encoding();
$zopen = $z->open($file, $flags);
if (true !== $zopen) {
return new WP_Error('incompatible_archive', __('Incompatible Archive.'), array($method.'_error' => $z->last_error));
}
$uncompressed_size = 0;
$num_files = $z->numFiles;
if (false === $num_files) return new WP_Error('incompatible_archive', __('Incompatible Archive.'), array($method.'_error' => $z->last_error));
for ($i = $starting_index; $i < $num_files; $i++) {
if (!$info = $z->statIndex($i)) {
return new WP_Error('stat_failed_'.$method, __('Could not retrieve file from archive.').' ('.$z->last_error.')');
}
// Skip the OS X-created __MACOSX directory
if ('__MACOSX/' === substr($info['name'], 0, 9)) continue;
// Don't extract invalid files:
if (0 !== validate_file($info['name'])) continue;
if (!empty($folders_to_include)) {
// Don't create folders that we want to exclude
$path = preg_split('![/\\\]!', untrailingslashit($info['name']));
if (isset($path[1]) && !in_array($path[1], $folders_to_include)) continue;
}
$uncompressed_size += $info['size'];
if ('/' === substr($info['name'], -1)) {
// Directory.
$needed_dirs[] = $to . untrailingslashit($info['name']);
} elseif ('.' !== ($dirname = dirname($info['name']))) {
// Path to a file.
$needed_dirs[] = $to . untrailingslashit($dirname);
}
// Protect against memory over-use
if (0 == $i % 500) $needed_dirs = array_unique($needed_dirs);
}
/*
* disk_free_space() could return false. Assume that any falsey value is an error.
* A disk that has zero free bytes has bigger problems.
* Require we have enough space to unzip the file and copy its contents, with a 10% buffer.
*/
if (self::wp_doing_cron()) {
$available_space = function_exists('disk_free_space') ? @disk_free_space(WP_CONTENT_DIR) : false;// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Call is speculative
if ($available_space && ($uncompressed_size * 2.1) > $available_space) {
return new WP_Error('disk_full_unzip_file', __('Could not copy files.', 'updraftplus').' '.__('You may have run out of disk space.'), compact('uncompressed_size', 'available_space'));
}
}
$needed_dirs = array_unique($needed_dirs);
foreach ($needed_dirs as $dir) {
// Check the parent folders of the folders all exist within the creation array.
if (untrailingslashit($to) == $dir) {
// Skip over the working directory, We know this exists (or will exist)
continue;
}
// If the directory is not within the working directory then skip it
if (false === strpos($dir, $to)) continue;
$parent_folder = dirname($dir);
while (!empty($parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder, $needed_dirs)) {
$needed_dirs[] = $parent_folder;
$parent_folder = dirname($parent_folder);
}
}
asort($needed_dirs);
// Create those directories if need be:
foreach ($needed_dirs as $_dir) {
// Only check to see if the Dir exists upon creation failure. Less I/O this way.
if (!$wp_filesystem->mkdir($_dir, FS_CHMOD_DIR) && !$wp_filesystem->is_dir($_dir)) {
return new WP_Error('mkdir_failed_'.$method, __('Could not create directory.'), substr($_dir, strlen($to)));
}
}
unset($needed_dirs);
$size_written = 0;
$content_cache = array();
$content_cache_highest = -1;
for ($i = $starting_index; $i < $num_files; $i++) {
if (!$info = $z->statIndex($i)) {
return new WP_Error('stat_failed_'.$method, __('Could not retrieve file from archive.'));
}
// directory
if ('/' == substr($info['name'], -1)) continue;
// Don't extract the OS X-created __MACOSX
if ('__MACOSX/' === substr($info['name'], 0, 9)) continue;
// Don't extract invalid files:
if (0 !== validate_file($info['name'])) continue;
if (!empty($folders_to_include)) {
// Don't extract folders that we want to exclude
$path = preg_split('![/\\\]!', untrailingslashit($info['name']));
if (isset($path[1]) && !in_array($path[1], $folders_to_include)) continue;
}
// N.B. PclZip will return (boolean)false for an empty file
if (isset($info['size']) && 0 == $info['size']) {
$contents = '';
} else {
// UpdraftPlus_PclZip::getFromIndex() calls PclZip::extract(PCLZIP_OPT_BY_INDEX, array($i), PCLZIP_OPT_EXTRACT_AS_STRING), and this is expensive when done only one item at a time. We try to cache in chunks for good performance as well as being able to resume.
if ($i > $content_cache_highest && 'UpdraftPlus_PclZip' == $class_to_use) {
$memory_usage = memory_get_usage(false);
$total_memory = $updraftplus->memory_check_current();
if ($memory_usage > 0 && $total_memory > 0) {
$memory_free = $total_memory*1048576 - $memory_usage;
} else {
// A sane default. Anything is ultimately better than WP's default of just unzipping everything into memory.
$memory_free = 50*1048576;
}
$use_memory = max(10485760, $memory_free - 10485760);
$total_byte_count = 0;
$content_cache = array();
$cache_indexes = array();
$cache_index = $i;
while ($cache_index < $num_files && $total_byte_count < $use_memory) {
if (false !== ($cinfo = $z->statIndex($cache_index)) && isset($cinfo['size']) && '/' != substr($cinfo['name'], -1) && '__MACOSX/' !== substr($cinfo['name'], 0, 9) && 0 === validate_file($cinfo['name'])) {
$total_byte_count += $cinfo['size'];
if ($total_byte_count < $use_memory) {
$cache_indexes[] = $cache_index;
$content_cache_highest = $cache_index;
}
}
$cache_index++;
}
if (!empty($cache_indexes)) {
$content_cache = $z->updraftplus_getFromIndexBulk($cache_indexes);
}
}
$contents = isset($content_cache[$i]) ? $content_cache[$i] : $z->getFromIndex($i);
}
if (false === $contents && ('pclzip' !== $method || 0 !== $info['size'])) {
return new WP_Error('extract_failed_'.$method, __('Could not extract file from archive.').' '.$z->last_error, json_encode($info));
}
if (!$wp_filesystem->put_contents($to . $info['name'], $contents, FS_CHMOD_FILE)) {
return new WP_Error('copy_failed_'.$method, __('Could not copy file.'), $info['name']);
}
if (!empty($info['size'])) $size_written += $info['size'];
do_action('updraftplus_unzip_file_unzipped', $file, $i, $info, $size_written, $num_files);
}
$z->close();
return true;
}
}
require_once(dirname(__FILE__) . '/wfAPI.php');
require_once(dirname(__FILE__) . '/wfBinaryList.php');
class wordfenceURLHoover {
private $debug = false;
public $errorMsg = false;
private $hostsToAdd = false;
private $table = '';
private $apiKey = false;
private $wordpressVersion = false;
private $useDB = true;
private $hostKeys = array();
private $hostList = array();
public $currentHooverID = false;
private $_foundSome = false;
private $_excludedHosts = array();
private $api = false;
private $db = false;
public static function standardExcludedHosts() {
static $standardExcludedHosts = null;
if ($standardExcludedHosts !== null) {
return $standardExcludedHosts;
}
global $wpdb;
$excludedHosts = array();
if (is_multisite()) {
$blogIDs = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs}"); //Can't use wp_get_sites or get_sites because they return empty at 10k sites
foreach ($blogIDs as $id) {
$homeURL = get_home_url($id);
$host = parse_url($homeURL, PHP_URL_HOST);
if ($host) {
$excludedHosts[$host] = 1;
}
$siteURL = get_site_url($id);
$host = parse_url($siteURL, PHP_URL_HOST);
if ($host) {
$excludedHosts[$host] = 1;
}
}
}
else {
$homeURL = wfUtils::wpHomeURL();
$host = parse_url($homeURL, PHP_URL_HOST);
if ($host) {
$excludedHosts[$host] = 1;
}
$siteURL = wfUtils::wpSiteURL();
$host = parse_url($siteURL, PHP_URL_HOST);
if ($host) {
$excludedHosts[$host] = 1;
}
}
$standardExcludedHosts = array_keys($excludedHosts);
return $standardExcludedHosts;
}
public function __sleep() {
$this->writeHosts();
return array('debug', 'errorMsg', 'apiKey', 'wordpressVersion');
}
public function __wakeup() {
$this->hostsToAdd = array();
$this->api = new wfAPI($this->apiKey, $this->wordpressVersion);
$this->db = new wfDB();
global $wpdb;
$this->table = isset($wpdb) ? wfDB::networkTable('wfHoover') : 'wp_wfHoover';
}
public function __construct($apiKey, $wordpressVersion, $continuation = false) {
$this->hostsToAdd = array();
$this->apiKey = $apiKey;
$this->wordpressVersion = $wordpressVersion;
$this->api = new wfAPI($apiKey, $wordpressVersion);
$this->db = new wfDB();
global $wpdb;
$this->table = isset($wpdb) ? wfDB::networkTable('wfHoover') : 'wp_wfHoover';
if (!$continuation) {
$this->cleanup();
}
}
public function cleanup() {
$this->db->truncate($this->table);
}
public function hoover($id, $data, $excludedHosts = array()) {
$this->currentHooverID = $id;
$this->_foundSome = 0;
$this->_excludedHosts = $excludedHosts;
@preg_replace_callback('_((?:(?://)(?:\S+(?::\S*)?@)?(?:(?:(?:[a-z\xa1-\xff0-9.-]+)(?:\.(?:(?:xn--[a-z\xa1-\xff0-9-]+)|[a-z\xa1-\xff]{2,}))))(?::\d{2,5})?)(?:/[a-z0-9\-\_\.~\!\*\(\);\:@&\=\+\$,\?#\[\]%]*)*)_iS', array($this, 'captureURL'), $data);
$this->writeHosts();
return $this->_foundSome;
}
private function dbg($msg) {
if ($this->debug) { wordfence::status(4, 'info', $msg); }
}
public function captureURL($matches) {
$id = $this->currentHooverID;
$url = 'http:' . $matches[0];
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return;
}
$components = parse_url($url);
if (preg_match('/\.(xn--(?:[a-z0-9-]*)[a-z0-9]+|[a-z\xa1-\xff0-9]{2,})$/i', $components['host'], $tld)) {
$tld = strtolower($tld[1]);
if (strpos(wfConfig::get('tldlist', ''), '|' . $tld . '|') === false) {
return;
}
}
else {
return;
}
foreach ($this->_excludedHosts as $h) {
if (strcasecmp($h, $components['host']) === 0) {
return;
}
}
$this->_foundSome++;
$host = (isset($components['host']) ? $components['host'] : '');
$hashes = $this->_generateHashes($url);
foreach ($hashes as $h) {
$this->_queueHost($id, $host, wfUtils::substr($h, 0, 4));
}
if (count($this->hostsToAdd) > 1000){ $this->writeHosts(); }
}
/**
* Queues the host for writing to the DB. Deduplication is performed here to minimize the row count on sites with
* large numbers of found URLs, and the exclusions lists have already been processed by the time it reaches this
* point.
*
* @param string $owner
* @param string $host
* @param string $key
*/
private function _queueHost($owner, $host, $key) {
$indexKey = md5($owner . '|' . $host, true);
if (array_key_exists($indexKey, $this->hostsToAdd)) {
return;
}
$this->hostsToAdd[$indexKey] = array('owner' => $owner, 'host' => $host, 'hostKey' => $key);
}
private function writeHosts() {
if (count($this->hostsToAdd) < 1) { return; }
if ($this->useDB) {
$sql = "INSERT INTO " . $this->table . " (owner, host, path, hostKey) VALUES ";
while ($elem = array_shift($this->hostsToAdd)) {
//This may be an issue for hyperDB or other abstraction layers, but leaving it for now.
$sql .= sprintf("('%s', '%s', '', '%s'),",
$this->db->realEscape($elem['owner']),
$this->db->realEscape($elem['host']),
$this->db->realEscape($elem['hostKey'])
);
}
$sql = rtrim($sql, ',');
$this->db->queryWrite($sql);
}
else {
while ($elem = array_shift($this->hostsToAdd)) {
$keys = str_split($elem['hostKey'], 4);
foreach ($keys as $k) {
$this->hostKeys[] = $k;
}
$this->hostList[] = array(
'owner' => $elem['owner'],
'host' => $elem['host'],
'hostKey' => $elem['hostKey']
);
}
}
}
public function getBaddies() {
wordfence::status(4, 'info', __("Gathering host keys.", 'wordfence'));
$allHostKeys = '';
if ($this->useDB) {
global $wpdb;
$dbh = $wpdb->dbh;
$useMySQLi = wfUtils::useMySQLi();
if ($useMySQLi) { //If direct-access MySQLi is available, we use it to minimize the memory footprint instead of letting it fetch everything into an array first
wordfence::status(4, 'info', __("Using MySQLi directly.", 'wordfence'));
$result = $dbh->query("SELECT DISTINCT hostKey FROM {$this->table} ORDER BY hostKey ASC LIMIT 100000"); /* We limit to 100,000 prefixes since more than that cannot be reliably checked within the default max_execution_time */
if (!is_object($result)) {
$this->errorMsg = "Unable to query database";
$this->dbg($this->errorMsg);
return false;
}
while ($row = $result->fetch_assoc()) {
$allHostKeys .= $row['hostKey'];
}
}
else {
$q1 = $this->db->querySelect("SELECT DISTINCT hostKey FROM {$this->table} ORDER BY hostKey ASC LIMIT 100000"); /* We limit to 100,000 prefixes since more than that cannot be reliably checked within the default max_execution_time */
foreach ($q1 as $hRec) {
$allHostKeys .= $hRec['hostKey'];
}
}
}
else {
$allHostKeys = implode('', array_values(array_unique($this->hostKeys)));
}
/**
* Check hash prefixes first. Each one is a 4-byte binary prefix of a SHA-256 hash of the URL. The response will
* be a binary list of 4-byte indices; The full URL for each index should be sent in the secondary query to
* find the true good/bad status.
*/
$allCount = wfUtils::strlen($allHostKeys) / 4;
if ($allCount > 0) {
if ($this->debug) {
$this->dbg("Checking {$allCount} hostkeys");
for ($i = 0; $i < $allCount; $i++) {
$key = wfUtils::substr($allHostKeys, $i * 4, 4);
$this->dbg("Checking hostkey: " . bin2hex($key));
}
}
wordfence::status(2, 'info', sprintf(/* translators: Number of domains. */ __("Checking %d host keys against Wordfence scanning servers.", 'wordfence'), $allCount));
$resp = $this->api->binCall('check_host_keys', $allHostKeys);
wordfence::status(2, 'info', __("Done host key check.", 'wordfence'));
$this->dbg("Done host key check");
$badHostKeys = '';
if ($resp['code'] >= 200 && $resp['code'] <= 299) {
$this->dbg("Host key response: " . bin2hex($resp['data']));
$dataLen = wfUtils::strlen($resp['data']);
if ($dataLen > 0 && $dataLen % 2 == 0) {
$this->dbg("Checking response indexes");
for ($i = 0; $i < $dataLen; $i += 2) {
$idx = wfUtils::array_first(unpack('n', wfUtils::substr($resp['data'], $i, 2)));
$this->dbg("Checking index {$idx}");
if ($idx < $allCount) {
$prefix = wfUtils::substr($allHostKeys, $idx * 4, 4);
$badHostKeys .= $prefix;
$this->dbg("Got bad hostkey for record: " . bin2hex($prefix));
}
else {
$this->dbg("Bad allHostKeys index: {$idx}");
$this->errorMsg = "Bad allHostKeys index: {$idx}";
return false;
}
}
}
else if ($dataLen > 0) {
$this->errorMsg = "Invalid data length received from Wordfence server: " . $dataLen;
$this->dbg($this->errorMsg);
return false;
}
}
else {
$this->errorMsg = "Wordfence server responded with an error. HTTP code " . $resp['code'] . " and data: " . $resp['data'];
return false;
}
$badCount = wfUtils::strlen($badHostKeys) / 4;
if ($badCount > 0) {
$urlsToCheck = array();
$totalURLs = 0;
//Reconcile flagged prefixes with their corresponding URLs
for ($i = 0; $i < $badCount; $i++) {
$prefix = wfUtils::substr($badHostKeys, $i * 4, 4);
if ($this->useDB) {
/**
* Putting a 10000 limit in here for sites that have a huge number of items with the same URL
* that repeats. This is an edge case. But if the URLs are malicious then presumably the admin
* will fix the malicious URLs and on subsequent scans the items (owners) that are above the
* 10000 limit will appear.
*/
$q1 = $this->db->querySelect("SELECT DISTINCT owner, host FROM {$this->table} WHERE hostKey = %s LIMIT 10000", $prefix);
foreach ($q1 as $rec) {
$url = 'http://' . $rec['host'];
if (!isset($urlsToCheck[$rec['owner']])) {
$urlsToCheck[$rec['owner']] = array();
}
if (!in_array($url, $urlsToCheck[$rec['owner']])) {
$urlsToCheck[$rec['owner']][] = $url;
$totalURLs++;
}
}
}
else {
foreach ($this->hostList as $rec) {
$pos = wfUtils::strpos($rec['hostKey'], $prefix);
if ($pos !== false && $pos % 4 == 0) {
$url = 'http://' . $rec['host'];
if (!isset($urlsToCheck[$rec['owner']])) {
$urlsToCheck[$rec['owner']] = array();
}
if (!in_array($url, $urlsToCheck[$rec['owner']])) {
$urlsToCheck[$rec['owner']][] = $url;
$totalURLs++;
}
}
}
}
if ($totalURLs > 10000) { break; }
}
if (count($urlsToCheck) > 0) {
wordfence::status(2, 'info', sprintf(
/* translators: 1. Number of URLs. 2. Number of files. */
__('Checking %1$d URLs from %2$d sources.', 'wordfence'),
$totalURLs,
sizeof($urlsToCheck)
));
$badURLs = $this->api->call('check_bad_urls', array(), array('toCheck' => json_encode($urlsToCheck)));
wordfence::status(2, 'info', __("Done URL check.", 'wordfence'));
$this->dbg("Done URL check");
if (is_array($badURLs) && count($badURLs) > 0) {
$finalResults = array();
foreach ($badURLs as $file => $badSiteList) {
if (!isset($finalResults[$file])) {
$finalResults[$file] = array();
}
foreach ($badSiteList as $badSite) {
$finalResults[$file][] = array(
'URL' => $badSite[0],
'badList' => $badSite[1]
);
}
}
$this->dbg("Confirmed " . count($badURLs) . " bad URLs");
return $finalResults;
}
}
}
}
return array();
}
/**
* Computes the canonical URL for $url and generates the hash variants that we'll check the safe browsing list for.
*
* @param string $url
* @return string[]
*/
protected function _generateHashes($url) {
$canonicalURL = $this->_canonicalizeURL($url);
//Extract the scheme
$scheme = 'http';
if (preg_match('~^([a-z]+[a-z0-9+\.\-]*)://(.*)$~i', $canonicalURL, $matches)) {
$scheme = strtolower($matches[1]);
$canonicalURL = $matches[2];
}
//Separate URL and query string
$query = '';
if (preg_match('/^([^?]+)(\??.*)/', $canonicalURL, $matches)) {
$canonicalURL = $matches[1];
$query = $matches[2];
}
//Separate host and path
$path = '';
preg_match('~^(.*?)(?:(/.*)|$)~', $canonicalURL, $matches);
$host = $matches[1];
if (isset($matches[2])) {
$path = $matches[2];
}
//Clean host
$host = $this->_normalizeHost($host);
//Generate hosts list
$hosts = array();
if (filter_var(trim($host, '[]'), FILTER_VALIDATE_IP)) {
$hosts[] = $host;
}
else {
$hostComponents = explode('.', $host);
$numComponents = count($hostComponents) - 7;
if ($numComponents < 1) {
$numComponents = 1;
}
$hosts[] = $host;
for ($i = $numComponents; $i < count($hostComponents) - 1; $i++) {
$hosts[] = implode('.', array_slice($hostComponents, $i));
}
}
//Generate hashes
$hashes = array();
foreach ($hosts as $h) {
if (($hash = $this->_shouldCheckHost($h)) !== false) {
$hashes[$h] = $hash; //WFSB preferred hash -- it uses hashes without any path
}
//Future hash needs may be added here
}
return $hashes;
}
protected function _canonicalizeURL($url) { //Based on https://developers.google.com/safe-browsing/v4/urls-hashing#canonicalization and Google's reference implementation https://github.com/google/safebrowsing/blob/master/urls.go
//Strip fragment
$url = $this->_array_first(explode('#', $url));
//Trim space
$url = trim($url);
//Remove tabs, CR, LF
$url = preg_replace('/[\t\n\r]/', '', $url);
//Normalize escapes
$url = $this->_normalizeEscape($url);
if ($url === false) { return false; }
//Extract the scheme
$scheme = 'http';
if (preg_match('~^([a-z]+[a-z0-9+\.\-]*)://(.*)$~i', $url, $matches)) {
$scheme = strtolower($matches[1]);
$url = $matches[2];
}
//Separate URL and query string
$query = '';
if (preg_match('/^([^?]+)(\??.*)/', $url, $matches)) {
$url = $matches[1];
$query = $matches[2];
}
$endsWithSlash = substr($url, -1) == '/';
//Separate host and path
$path = '';
preg_match('~^(.*?)(?:(/.*)|$)~', $url, $matches);
$host = $matches[1];
if (isset($matches[2])) {
$path = $matches[2];
}
//Clean host
$host = $this->_normalizeHost($host);
if ($host === false) { return false; }
//Clean path
$path = preg_replace('~//+~', '/', $path); //Multiple slashes -> single slash
$path = preg_replace('~(?:^|/)\.(?:$|/)~', '/', $path); //. path components removed
while (preg_match('~/(?!\.\./)[^/]+/\.\.(?:$|/)~', $path)) { //Resolve ..
$path = preg_replace('~/(?!\.\./)[^/]+/\.\.(?:$|/)~', '/', $path, 1);
}
$path = preg_replace('~(?:^|/)\.\.(?:$|/)~', '/', $path); //Eliminate .. at the beginning
$path = trim($path, '.');
$path = preg_replace('/\.\.+/', '.', $path);
if ($path == '.' || $path == '') {
$path = '/';
}
else if ($endsWithSlash && substr($path, -1) != '/') {
$path .= '/';
}
return $scheme . '://' . $host . $path . $query;
}
protected function _normalizeEscape($url) {
$maxDepth = 1024;
$i = 0;
while (preg_match('/%([0-9a-f]{2})/i', $url)) {
$url = preg_replace_callback('/%([0-9a-f]{2})/i', array($this, '_hex2binCallback'), $url);
$i++;
if ($i > $maxDepth) {
return false;
}
}
return preg_replace_callback('/[\x00-\x20\x7f-\xff#%]/', array($this, '_bin2hexCallback'), $url);
}
protected function _hex2binCallback($matches) {
return wfUtils::hex2bin($matches[1]);
}
protected function _bin2hexCallback($matches) {
return '%' . bin2hex($matches[0]);
}
protected function _normalizeHost($host) {
//Strip username:password
$host = $this->_array_last(explode('@', $host));
//IPv6 literal
if (substr($host, 0, 1) == '[') {
if (strpos($host, ']') === false) { //No closing bracket
return false;
}
}
//Strip port
$host = preg_replace('/:\d+$/', '', $host);
//Unicode to IDNA
$u = rawurldecode($host);
if (preg_match('/[\x81-\xff]/', $u)) { //0x80 is technically Unicode, but the GSB canonicalization doesn't consider it one
if (function_exists('idn_to_ascii')) { //Some PHP versions don't have this and we don't have a polyfill
$host = idn_to_ascii($u);
}
}
//Remove extra dots
$host = trim($host, '.');
$host = preg_replace('/\.\.+/', '.', $host);
//Canonicalize IP addresses
if ($iphost = $this->_parseIP($host)) {
return $iphost;
}
return strtolower($host);
}
protected function _parseIP($host) {
// The Windows resolver allows a 4-part dotted decimal IP address to have a
// space followed by any old rubbish, so long as the total length of the
// string doesn't get above 15 characters. So, "10.192.95.89 xy" is
// resolved to 10.192.95.89. If the string length is greater than 15
// characters, e.g. "10.192.95.89 xy.wildcard.example.com", it will be
// resolved through DNS.
if (strlen($host) <= 15) {
$host = $this->_array_first(explode(' ', $host));
}
if (!preg_match('/^((?:0x[0-9a-f]+|[0-9\.])+)$/i', $host)) {
return false;
}
$parts = explode('.', $host);
if (count($parts) > 4) {
return false;
}
$strings = array();
foreach ($parts as $i => $p) {
if ($i == count($parts) - 1) {
$strings[] = $this->_canonicalNum($p, 5 - count($parts));
}
else {
$strings[] = $this->_canonicalNum($p, 1);
}
if ($strings[$i] == '') {
return '';
}
}
return implode('.', $strings);
}
protected function _canonicalNum($part, $n) {
if ($n <= 0 || $n > 4) {
return '';
}
if (preg_match('/^0x(\d+)$/i', $part, $matches)) { //hex
$part = hexdec($matches[1]);
}
else if (preg_match('/^0(\d+)$/i', $part, $matches)) { //octal
$part = octdec($matches[1]);
}
else {
$part = (int) $part;
}
$strings = array_fill(0, $n, '');
for ($i = $n - 1; $i >= 0; $i--) {
$strings[$i] = (string) ($part & 0xff);
$part = $part >> 8;
}
return implode('.', $strings);
}
/**
* Checks whether the host should be included or not by querying the skip list. If yes, returns the binary sha256
* hash of it.
*
* @param string $host
* @return false|string
*/
protected function _shouldCheckHost($host) {
static $skipList = null;
if ($skipList == null) {
$skipList = new wfBinaryList(base64_decode(wfConfig::get('wfsbskip', '')));
}
$hash = hash('sha256', $host, true);
return $skipList->contains($hash) === false ? $hash : false;
}
protected function _array_first($array) {
if (empty($array)) {
return null;
}
return $array[0];
}
protected function _array_last($array) {
if (empty($array)) {
return null;
}
return $array[count($array) - 1];
}
}
class wfCommonPasswords {
const BASE_LIST = [
"password",
"1234567890",
"123456789",
"12345678",
"1234567",
"123456",
"12345",
"1234",
"123",
"12",
"1"
];
const EXTENDED_LIST = [
"Password",
"passwd",
"admin",
"administrator",
"super",
"superuser",
"supervisor",
"root",
"manager",
"mgr",
"abc123",
"qwerty",
"asdf",
"zxcv",
"9876543210",
"876543210",
"76543210",
"6543210",
"543210",
"43210",
"3210",
"210",
"10",
"0",
"1",
"11",
"111",
"1111",
"11111",
"2",
"22",
"222",
"2222",
"22222",
"3",
"33",
"333",
"3333",
"33333",
"4",
"44",
"444",
"4444",
"44444",
"5",
"55",
"555",
"5555",
"55555",
"6",
"66",
"666",
"6666",
"66666",
"7",
"77",
"777",
"7777",
"77777",
"8",
"88",
"888",
"8888",
"88888",
"9",
"99",
"999",
"9999",
"99999",
"0",
"00",
"000",
"0000",
"00000"
];
public static function getList($extended = false) {
$list = self::BASE_LIST;
if ($extended)
$list = array_merge($list, self::EXTENDED_LIST);
return $list;
}
public static function addToKeyedList(&$list, $extended = false) {
foreach (self::getList($extended) as $password) {
$list[$password] = true;
}
}
}
/**
* Contact Form
*
* Displays a customizable contact form
*/
if ( ! defined( 'ABSPATH' ) ) { exit; } // Exit if accessed directly
if ( !class_exists( 'avia_sc_contact' ) )
{
class avia_sc_contact extends aviaShortcodeTemplate
{
/**
* Create the config array for the shortcode button
*/
function shortcode_insert_button()
{
$this->config['self_closing'] = 'no';
$this->config['name'] = __('Contact Form', 'avia_framework' );
$this->config['tab'] = __('Content Elements', 'avia_framework' );
$this->config['icon'] = AviaBuilder::$path['imagesURL']."sc-contact.png";
$this->config['order'] = 43;
$this->config['target'] = 'avia-target-insert';
$this->config['shortcode'] = 'av_contact';
$this->config['shortcode_nested'] = array('av_contact_field');
$this->config['tooltip'] = __('Creates a customizable contact form', 'avia_framework' );
$this->config['preview'] = "large";
$this->config['disabling_allowed'] = true;
$this->config['id_name'] = 'id';
$this->config['id_show'] = 'yes';
$this->config['aria_label'] = 'yes';
$this->config['alb_desc_id'] = 'alb_description';
}
function extra_assets()
{
//load css
wp_enqueue_style( 'avia-module-contact' , AviaBuilder::$path['pluginUrlRoot'].'avia-shortcodes/contact/contact.css' , array('avia-layout'), false );
//load js
wp_enqueue_script( 'avia-module-contact' , AviaBuilder::$path['pluginUrlRoot'].'avia-shortcodes/contact/contact.js' , array('avia-shortcodes'), false, true );
}
/**
* Popup Elements
*
* If this function is defined in a child class the element automatically gets an edit button, that, when pressed
* opens a modal window that allows to edit the element properties
*
* @return void
*/
function popup_elements()
{
$link = '' . __( 'activated here', 'avia_framework' ) . '';
$captcha_desc = __( 'Do you want to display a Captcha field at the end of the form so users must prove they are human?', 'avia_framework' ) . '';
$captcha_desc .= __( 'Either by solving a simply mathematical question or by Google reCaptcha, that needs to be', 'avia_framework' ) . ' ' . $link . '. ';
$captcha_desc .= __( 'In case Google reCAPTCHA is deactivated (maybe later) in theme options, Enfold captcha will be used, if you selected to use V2 then V2 will be used for this contact form (even if you selected V3 in theme options). If you selected V3 here and the score fails or you did not selected V3 in theme options then V2 will be used to check if user is a human.', 'avia_framework' );
$captcha_desc .= '';
$captcha_desc .= __( '(It is recommended to only activate this if you receive spam from your contact form, since an invisible spam protection is also implemented that should filter most spam messages by robots anyway)', 'avia_framework' );
$default_from = parse_url( home_url() );
$default_from = ( ! empty( $default_from['host'] ) ) ? "no-reply@{$default_from['host']}" : 'no-reply@wp-message.com';
$this->elements = apply_filters( 'avf_sc_contact_popup_elements', array(
array(
"type" => "tab_container", 'nodescription' => true
),
array(
"type" => "tab",
"name" => __("Form" , 'avia_framework'),
'nodescription' => true
),
array(
"name" => __("Your email address", 'avia_framework' ),
"desc" => __("Enter one or more Email addresses (separated by comma) where mails should be delivered to.", 'avia_framework' ) ." (".__("Default:", 'avia_framework' ) ." ". get_option('admin_email').")",
"id" => "email",
'container_class' =>"avia-element-fullwidth",
"std" => get_option('admin_email'),
"type" => "input"),
array(
'name' => __( 'Your from address', 'avia_framework' ),
'desc' => sprintf( __( 'Enter your from address for the form - if left blank it will default to user email or %s', 'avia_framework' ), $default_from ),
'id' => 'from_email',
'std' => '',
'type' => 'input'
),
array(
"name" => __("Form Title", 'avia_framework' ),
"desc" => __("Enter a form title that is displayed above the form", 'avia_framework' ),
"id" => "title",
"std" => __("Send us mail", 'avia_framework' ),
"type" => "input"),
array(
'type' => 'template',
'template_id' => 'heading_tag',
'theme_default' => 'h3',
'context' => __CLASS__
),
array(
"name" => __("Add/Edit Contact Form Elements", 'avia_framework' ),
"desc" => __("Here you can add, remove and edit the form Elements of your contact form.", 'avia_framework' )."
".
__("Available form elements are: single line Input elements, Textareas, Checkboxes and Select-Dropdown menus.", 'avia_framework' )."
".
__("It is recommended to not delete the 'E-Mail' field if you want to use an auto responder.", 'avia_framework' ),
"type" => "modal_group",
"id" => "content",
"modal_title" => __("Edit Form Element", 'avia_framework' ),
"std" => array(
array('label'=>__('Name', 'avia_framework' ), 'type'=>'text', 'check'=>'is_empty'),
array('label'=>__('E-Mail', 'avia_framework' ), 'type'=>'text', 'check'=>'is_email'),
array('label'=>__('Subject', 'avia_framework' ), 'type'=>'text', 'check'=>'is_empty'),
array('label'=>__('Message', 'avia_framework' ), 'type'=>'textarea', 'check'=>'is_empty'),
),
'subelements' => array(
array(
"name" => __("Form Element Label", 'avia_framework' ),
"desc" => "",
"id" => "label",
"std" => "",
"type" => "input"),
array(
"name" => __("Form Element Type", 'avia_framework' ),
"desc" => "",
"id" => "type",
"type" => "select",
"std" => "text",
"no_first"=>true,
"subtype" => array( __('Form Element: Text Input', 'avia_framework' ) =>'text',
__('Form Element: Text Area', 'avia_framework' ) =>'textarea',
__('Form Element: Select Element', 'avia_framework' ) =>'select',
__('Form Element: Checkbox', 'avia_framework' ) =>'checkbox',
__('Form Element: Datepicker', 'avia_framework' ) =>'datepicker',
__('Custom HTML: Add a Description', 'avia_framework' ) =>'html',
)),
array(
"name" => __("Form Element Options", 'avia_framework' ) ,
"desc" => __("Enter any number of options that the visitor can choose from. Separate these Options with a comma.", 'avia_framework' ) ."
".
__("Example: Option 1, Option 2, Option 3", 'avia_framework' ).""."
".
__("Note: If you want to use a comma in the option text you have to write 2 comma.", 'avia_framework' )."" ,
"id" => "options",
"required" => array('type','equals','select'),
"std" => "",
"type" => "input"),
array(
"name" => __("Multiple answers", 'avia_framework' ),
"desc" => __("Check if you want to enable multiple answers", 'avia_framework' ) ,
"id" => "multi_select",
"required" => array('type','equals','select'),
"std" => "",
"type" => "checkbox"),
array(
"name" => __("Preselect checkbox", 'avia_framework' ),
"desc" => __("Check if you want to preselect the checkbox", 'avia_framework' ) ,
"id" => "av_contact_preselect",
"required" => array('type','equals','checkbox'),
"std" => "",
"type" => "checkbox"),
array(
"name" => __("Add Description", 'avia_framework' ) ,
"id" => "content",
"required" => array('type','equals','html'),
"std" => "",
"type" => "tiny_mce"),
array(
"name" => __("Form Element Validation", 'avia_framework' ),
"desc" => "When selecting "Valid E-Mail address with special characters" keep in mind, that not all E-Mail systems support this feature properly.",
"id" => "check",
"type" => "select",
"std" => "",
"no_first"=>true,
"required" => array('type','not','html'),
"subtype" => array( __('No Validation', 'avia_framework' ) =>'',
__('Is not empty', 'avia_framework' ) =>'is_empty',
__('Valid E-Mail address', 'avia_framework' ) =>'is_email',
__('Valid E-Mail address with special characters', 'avia_framework' ) =>'is_ext_email',
__('Valid Phone Number', 'avia_framework' ) =>'is_phone',
__('Valid Number', 'avia_framework' ) =>'is_number')),
array(
"name" => __("Form Element Width", 'avia_framework' ),
"desc" => __("Change the width of your elements and let them appear beside each other instead of underneath", 'avia_framework' ) ,
"id" => "width",
"type" => "select",
"std" => "",
"no_first"=>true,
"required" => array('type','not','html'),
"subtype" => array( "Fullwidth" =>'', "1/2" =>'element_half', "1/3" =>'element_third' , "2/3" =>'element_two_third', "1/4" => 'element_fourth', "3/4" => 'element_three_fourth')),
)
),
array(
"name" => __("Submit Button Label", 'avia_framework' ),
"desc" => __("Enter the submit buttons label text here", 'avia_framework' ),
"id" => "button",
"std" => __("Submit", 'avia_framework' ),
"type" => "input"),
array(
"name" => __("What should happen once the form gets sent?", 'avia_framework' ),
"desc" => "",
"id" => "on_send",
"type" => "select",
"std" => "",
"no_first"=>true,
"subtype" => array( __('Display a short message on the same page', 'avia_framework' ) =>'',
__('Redirect the user to another page', 'avia_framework' ) =>'redirect',
)),
array(
"name" => __("Message Sent label", 'avia_framework' ),
"desc" => __("What should be displayed once the message is sent?", 'avia_framework' ),
"id" => "sent",
"required" => array('on_send','not','redirect'),
"std" => __("Your message has been sent!", 'avia_framework' ),
"type" => "input"),
array(
"name" => __("Redirect", 'avia_framework' ),
"desc" => __("To which page do you want the user send to?", 'avia_framework' ),
"id" => "link",
"type" => "linkpicker",
"fetchTMPL" => true,
"std" => "",
"required" => array('on_send','equals','redirect'),
"subtype" => array(
__('Set Manually', 'avia_framework' ) =>'manually',
__('Single Entry', 'avia_framework' ) =>'single'
),
"std" => ""),
array(
"name" => __("E-Mail Subject", 'avia_framework' ),
"desc" => __("You can define a custom Email Subject for your form here. If left empty the subject will be", 'avia_framework' ).": ".__("New Message", 'avia_framework') . " (".__('sent by contact form at','avia_framework')." ".get_option('blogname').")" ,
"id" => "subject",
"std" => "",
"type" => "input"
),
array(
"name" => __("Autoresponder from email address", 'avia_framework' ),
"desc" => __("Enter the from email address for the autoresponder.", 'avia_framework' ) . " (" .__( "Default:", 'avia_framework' ) . " " . get_option( 'admin_email' ) . ")",
"id" => "autoresponder_email",
"std" => get_option('admin_email'),
"type" => "input"
),
array(
"name" => __("Autorespond Text", 'avia_framework' ),
"desc" => __("Enter a message that will be sent to the users email address once he has submitted the form.", 'avia_framework' )."
".
__("If left empty no auto-response will be sent.", 'avia_framework' ),
"id" => "autorespond",
"std" => "",
"type" => "textarea"
),
array(
'name' => __( 'Contact Form Captcha', 'avia_framework' ),
'desc' => $captcha_desc,
'id' => 'captcha',
'type' => 'select',
'std' => '',
'subtype' => array(
__( 'Don\'t display Captcha', 'avia_framework' ) => '',
__( 'Use Enfold Numeric Captcha', 'avia_framework' ) => 'active',
__( 'Use Google reCAPTCHA V2 if activated', 'avia_framework' ) => 'recaptcha_v2',
__( 'Use Google reCAPTCHA V3 if activated (fallback is V2)', 'avia_framework' ) => 'recaptcha_v3'
)
),
array(
'name' => __( 'reCAPTCHA V2 theme color', 'avia_framework' ),
'desc' => __( 'Select a theme color for this contact form widget', 'avia_framework' ),
'id' => 'captcha_theme',
'type' => 'select',
'required' => array( 'captcha', 'parent_in_array', 'recaptcha_v2 recaptcha_v3' ),
'std' => 'light',
'subtype' => array(
__( 'Light', 'avia_framework' ) => 'light',
__( 'Dark', 'avia_framework' ) => 'dark'
)
),
array(
'name' => __( 'reCAPTCHA V2 theme size', 'avia_framework' ),
'desc' => __( 'Select a size for this contact form widget', 'avia_framework' ),
'id' => 'captcha_size',
'type' => 'select',
'required' => array( 'captcha', 'parent_in_array', 'recaptcha_v2 recaptcha_v3'),
'std' => 'normal',
'subtype' => array(
__( 'Normal', 'avia_framework' ) => 'normal',
__( 'Compact', 'avia_framework' ) => 'compact'
)
),
array(
'name' => __( 'Select score for human', 'avia_framework' ),
'id' => 'captcha_score',
'desc' => __( 'A score of 1.0 is very likely a good interaction, 0.0 is very likely a bot. Google recommends a threshold of 0.5 by default. In case we encounter a non human we ask user to verify with Version 2 chckbox.', 'avia_framework' ),
'type' => 'select',
'required' => array( 'captcha', 'equals', 'recaptcha_v3' ),
'subtype' => AviaHtmlHelper::number_array( 0, 1, 0.1, array( __( 'Default', 'avia_framework' ) => '' ) ),
'std' => '0.5'
),
array(
"name" => __("Hide Form Labels", 'avia_framework' ),
"desc" => __("Check if you want to hide form labels above the form elements. The form will instead try to use an inline label (not supported on old browsers)", 'avia_framework' ) ,
"id" => "hide_labels",
"std" => "",
"type" => "checkbox"),
array(
"name" => __("Label/Send Button alignment", 'avia_framework' ),
"desc" => __("Select how to align the form labels and the send button", 'avia_framework' ),
"id" => "form_align",
"type" => "select",
"std" => "",
"subtype" => array(
__('Default', 'avia_framework' ) =>'',
__('Centered', 'avia_framework' ) => 'centered'
),
"std" => ""),
array(
"type" => "close_div",
'nodescription' => true
),
array(
"type" => "tab",
"name" => __("Colors",'avia_framework' ),
'nodescription' => true
),
array(
"name" => __("Form Color Scheme", 'avia_framework' ),
"desc" => __("Select a form color scheme here", 'avia_framework' ),
"id" => "color",
"type" => "select",
"std" => "",
"subtype" => array( __('Default', 'avia_framework' )=>'',
__('Light transparent', 'avia_framework' )=>'av-custom-form-color av-light-form',
__('Dark transparent', 'avia_framework' ) =>'av-custom-form-color av-dark-form'),
),
array(
"type" => "close_div",
'nodescription' => true
),
array(
'type' => 'template',
'template_id' => 'screen_options_tab'
),
array(
"type" => "close_div",
'nodescription' => true
),
));
}
/**
* Editor Sub Element - this function defines the visual appearance of an element that is displayed within a modal window and on click opens its own modal window
* Works in the same way as Editor Element
* @param array $params this array holds the default values for $content and $args.
* @return $params the return array usually holds an innerHtml key that holds item specific markup.
*/
function editor_sub_element($params)
{
$template = $this->update_template("label", __("Element", 'avia_framework' ). ": {{label}}");
$params['innerHtml'] = "";
$params['innerHtml'] .= "";
$params['innerHtml'] .= "
class_by_arguments('check' ,$params['args']).">";
$params['innerHtml'] .= "".__("Element", 'avia_framework' ). ": ".$params['args']['label']."";
$params['innerHtml'] .= " *";
$params['innerHtml'] .= "
";
$params['innerHtml'] .= "
";
return $params;
}
/**
* Frontend Shortcode Handler
*
* @param array $atts array of attributes
* @param string $content text within enclosing form of shortcode element
* @param string $shortcodename the shortcode found, when == callback name
* @return string $output returns the modified html string
*/
function shortcode_handler( $atts, $content = "", $shortcodename = "", $meta = "" )
{
extract( AviaHelper::av_mobile_sizes( $atts ) ); //return $av_font_classes, $av_title_font_classes and $av_display_classes
$meta = aviaShortcodeTemplate::set_frontend_developer_heading_tag( $atts, $meta );
$atts = shortcode_atts( apply_filters( 'avf_sc_contact_default_atts', array(
'email' => get_option( 'admin_email' ),
'from_email' => '',
'button' => __( "Submit", 'avia_framework' ),
'autoresponder_email' => '',
'autorespond' => '',
'captcha' => '',
'captcha_theme' => 'light',
'captcha_size' => 'normal',
'captcha_score' => '',
'subject' => '',
'on_send' => '',
'link' => '',
'sent' => __( "Your message has been sent!", 'avia_framework' ),
'title' => __( "Send us mail", 'avia_framework' ),
'color' => "",
'hide_labels' => "",
'form_align' => ""
) ), $atts, $this->config['shortcode'] );
/**
* For backwards comp. only - can be removed in future versions
* In this case set default value in shortcode_atts to get_option('admin_email')
*
* @since 4.4.2
*/
if( empty( $atts['autoresponder_email'] ) )
{
$atts['autoresponder_email'] = $atts['email'];
}
/**
* For backwards comp. only - can be removed in future versions
*
* @since 4.6.2
*/
if( empty( $atts['captcha_theme'] ) )
{
$atts['captcha_theme'] = 'light';
}
extract($atts);
$post_id = function_exists('avia_get_the_id') ? avia_get_the_id() : get_the_ID();
$redirect = !empty($on_send) ? AviaHelper::get_url($link) : "";
if(!empty($form_align)) $meta['el_class'] .= " av-centered-form ";
$default_heading = ! empty( $meta['heading_tag'] ) ? $meta['heading_tag'] : 'h3';
$args = array(
'heading' => $default_heading,
'extra_class' => $meta['heading_class']
);
$extra_args = array( $this, $atts, $content, 'title' );
/**
* @since 4.5.7.2
* @return array
*/
$args = apply_filters( 'avf_customize_heading_settings', $args, __CLASS__, $extra_args );
$heading = ! empty( $args['heading'] ) ? $args['heading'] : $default_heading;
$css = ! empty( $args['extra_class'] ) ? $args['extra_class'] : $meta['heading_class'];
$form_args = array(
"heading" => $title ? "<{$heading} class='{$css}'>{$title}{$heading}>" : "",
"success" => "<{$heading} class='avia-form-success {$css}'>{$sent}{$heading}>",
"submit" => $button,
"myemail" => $email,
'myfrom' => $from_email,
"action" => get_permalink($post_id),
"myblogname" => get_option('blogname'),
"autoresponder" => $autorespond,
"autoresponder_subject" => __( 'Thank you for your Message!', 'avia_framework' ),
"autoresponder_email" => $autoresponder_email,
"subject" => $subject,
"form_class" => $meta['el_class']." ".$color." ".$av_display_classes,
"multiform" => true, //allows creation of multiple forms without id collision
"label_first" => true,
"redirect" => $redirect,
"placeholder" => $hide_labels,
"numeric_names" => true,
'el-id' => $meta['custom_el_id'],
'aria_label' => $meta['aria_label'],
);
if(trim($form_args['myemail']) == '') $form_args['myemail'] = get_option('admin_email');
$content = str_replace("\,", ",", $content );
//form fields passed by the user
$form_fields = $this->helper_array2form_fields(ShortcodeHelper::shortcode2array($content, 1));
//fake username field that is not visible. if the field has a value a spam bot tried to send the form
$elements['avia_username'] = array('type'=>'decoy', 'label'=>'', 'check'=> 'must_empty' );
//captcha field for the user to verify that he is real
$google = in_array( $captcha, array( 'recaptcha_v2', 'recaptcha_v3' ) );
if( 'active' == $captcha || ( $google && Avia_Google_reCAPTCHA()->is_loading_prohibited() ) )
{
$elements['avia_age'] = array(
'type' => 'captcha',
'check' => 'captcha',
'label' => __( 'Please prove that you are human by solving the equation', 'avia_framework' )
);
}
else if( $google )
{
$elements['avia_age'] = array(
'type' => 'grecaptcha',
'container_class' => '',
'custom_class' => '',
'context' => 'av_contact_form',
'token_input' => 'av_recaptcha_token',
'version' => 'avia_' . $captcha,
'theme' => $captcha_theme,
'size' => $captcha_size,
'score' => $captcha_score,
'text_to_preview' => Avia_Builder()->in_text_to_preview_mode()
);
}
//merge all fields
$form_fields = apply_filters('avia_contact_form_elements', array_merge($form_fields, $elements));
$form_fields = apply_filters('avf_sc_contact_form_elements', $form_fields, $atts );
$form_args = apply_filters('avia_contact_form_args', $form_args, $post_id);
$contact_form = new avia_form($form_args);
$contact_form->create_elements($form_fields);
$output = $contact_form->display_form(true);
return $output;
}
/*helper function that converts the shortcode sub array into the format necessary for the contact form*/
function helper_array2form_fields($base)
{
$form_fields = array();
$labels = array();
if(is_array($base))
{
foreach($base as $key => $field)
{
$sanizited_id = trim(strtolower($field['attr']['label']));
$labels[$sanizited_id] = empty($labels[$sanizited_id]) ? 1 : $labels[$sanizited_id] + 1;
if($labels[$sanizited_id] > 1) $sanizited_id = $sanizited_id . '_' . $labels[$sanizited_id];
$form_fields[$sanizited_id] = $field['attr'];
if(!empty($field['content'])) $form_fields[$sanizited_id]['content'] = ShortcodeHelper::avia_apply_autop($field['content']);
}
}
return $form_fields;
}
}
}
/**
* Türkçe translation
* @author I.Taskinoglu & A.Kaya
* @author Abdullah ELEN
* @author Osman KAYAN
* @author alikayan95@gmail.com
* @author Cengiz AKCAN cengiz@vobo.company
* @author Ali KAYAN
* @version 2025-06-26
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(['elfinder'], factory);
} else if (typeof exports !== 'undefined') {
module.exports = factory(require('elfinder'));
} else {
factory(root.elFinder);
}
}(this, function(elFinder) {
elFinder.prototype.i18.tr = {
translator : 'I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>, Abdullah ELEN <abdullahelen@msn.com>, Osman KAYAN <osmnkayan@gmail.com>, alikayan95@gmail.com, Cengiz AKCAN cengiz@vobo.company, Ali KAYAN <alikayan95@gmail.com>',
language : 'Türkçe',
direction : 'ltr',
dateFormat : 'd.m.Y H:i', // will show like: 26.06.2025 09:57
fancyDateFormat : '$1 H:i', // will show like: Bugün 09:57
nonameDateFormat : 'ymd-His', // noname upload will show like: 250626-095752
messages : {
/********************************** errors **********************************/
'error' : 'Hata',
'errUnknown' : 'Bilinmeyen hata.',
'errUnknownCmd' : 'Bilinmeyen komut.',
'errJqui' : 'Geçersiz jQuery UI yapılandırması. Seçilebilir, sürükle ve bırak bileşenlerini içermelidir.',
'errNode' : 'elFinder yaratılması için DOM Element\'ine ihtiyacı vardır.',
'errURL' : 'Geçersiz elFinder yapılandırması! URL seçeneği ayarlanmamış.',
'errAccess' : 'Erişim reddedildi.',
'errConnect' : 'Sunucu-Tarafı\'na bağlanılamıyor.',
'errAbort' : 'Bağlantı iptal edildi.',
'errTimeout' : 'Bağlantı zaman aşımı.',
'errNotFound' : 'Sunucu-Tarafı bulunamadı.',
'errResponse' : 'Geçersiz Sunucu-Tarafı yanıtı.',
'errConf' : 'Geçersiz Sunucu-Tarafı yapılandırması.',
'errJSON' : 'PHP JSON modülü kurulu değil.',
'errNoVolumes' : 'Okunabilir birimler mevcut değil.',
'errCmdParams' : '"$1" komutu için geçersiz parametre.',
'errDataNotJSON' : 'Veri JSON formatında değil.',
'errDataEmpty' : 'Veri boş.',
'errCmdReq' : 'Sunucu-Tarafı isteği için komut adı gerekli.',
'errOpen' : '"$1" açılamıyor.',
'errNotFolder' : 'Nesne bir dizin değil.',
'errNotFile' : 'Nesne bir dosya değil.',
'errRead' : '"$1" okunamıyor.',
'errWrite' : '"$1" yazılamıyor.',
'errPerm' : 'İzin reddedildi.',
'errLocked' : '"$1" kilitli. Bu nedenle taşıma, yeniden adlandırma veya kaldırma yapılamıyor.',
'errExists' : '"$1" adında bir dosya zaten var.',
'errInvName' : 'Geçersiz dosya ismi.',
'errInvDirname' : 'Geçersiz dizin ismi.', // from v2.1.24 added 12.4.2017
'errFolderNotFound' : 'Dizin bulunamadı.',
'errFileNotFound' : 'Dosya bulunamadı.',
'errTrgFolderNotFound' : 'Hedef dizin "$1" bulunamadı.',
'errPopup' : 'Tarayıcı popup penceresi açmayı engelledi. Tarayıcı ayarlarından dosya açmayı aktif hale getirin.',
'errMkdir' : 'Dizin oluşturulamıyor "$1".',
'errMkfile' : '"$1" dosyası oluşturulamıyor.',
'errRename' : '"$1" yeniden adlandırma yapılamıyor.',
'errCopyFrom' : '"$1" biriminden dosya kopyalamaya izin verilmedi.',
'errCopyTo' : '"$1" birimine dosya kopyalamaya izin verilmedi.',
'errMkOutLink' : 'Birim kökü dışında bir bağlantı oluşturulamıyor', // from v2.1 added 03.10.2015
'errUpload' : 'Dosya yükleme hatası.', // old name - errUploadCommon
'errUploadFile' : '"$1" dosyası yüklenemedi.', // old name - errUpload
'errUploadNoFiles' : 'Yüklenecek dosya bulunamadı.',
'errUploadTotalSize' : 'Veri izin verilen boyuttan büyük.', // old name - errMaxSize
'errUploadFileSize' : 'Dosya izin verilen boyuttan büyük.', // old name - errFileMaxSize
'errUploadMime' : 'Dosya türüne izin verilmiyor.',
'errUploadTransfer' : '"$1" aktarma hatası.',
'errUploadTemp' : 'Yükleme için geçici dosya yapılamıyor.', // from v2.1 added 26.09.2015
'errNotReplace' : '"$1" nesnesi bu konumda zaten var ve başka türde nesne ile değiştirilemez.', // new
'errReplace' : 'Değişiklik yapılamıyor "$1".',
'errSave' : '"$1" kaydedilemiyor.',
'errCopy' : '"$1" kopyalanamıyor.',
'errMove' : '"$1" taşınamıyor.',
'errCopyInItself' : '"$1" kendi içine kopyalanamaz.',
'errRm' : '"$1" kaldırılamıyor.',
'errTrash' : 'Çöp kutusuna taşınamıyor.', // from v2.1.24 added 30.4.2017
'errRmSrc' : 'Kaynak dosya(lar) kaldırılamıyor.',
'errExtract' : '"$1" kaynağından dosyalar çıkartılamıyor.',
'errArchive' : 'Arşiv oluşturulamıyor.',
'errArcType' : 'Desteklenmeyen arşiv türü.',
'errNoArchive' : 'Dosya arşiv değil veya desteklenmeyen arşiv türü.',
'errCmdNoSupport' : 'Sunucu-Tarafı bu komutu desteklemiyor.',
'errReplByChild' : '“$1” dizini, içerdiği bir öğe tarafından değiştirilemez.',
'errArcSymlinks' : 'Sembolik bağlantıları içeren arşivlerin açılması güvenlik nedeniyle reddedildi.', // edited 24.06.2012
'errArcMaxSize' : 'Arşiv dosyaları izin verilen maksimum boyutu aştı.',
'errResize' : '"$1" yeniden boyutlandırılamıyor.',
'errResizeDegree' : 'Geçersiz döndürme derecesi.', // added 7.3.2013
'errResizeRotate' : 'Resim döndürülemiyor.', // added 7.3.2013
'errResizeSize' : 'Geçersiz resim boyutu.', // added 7.3.2013
'errResizeNoChange' : 'Resim boyutu değiştirilemez.', // added 7.3.2013
'errUsupportType' : 'Desteklenmeyen dosya türü.',
'errNotUTF8Content' : 'Dosya "$1" UTF-8 olmadığından düzenlenemez.', // added 9.11.2011
'errNetMount' : '"$1" bağlanamadı.', // added 17.04.2012
'errNetMountNoDriver' : 'Desteklenmeyen protokol.', // added 17.04.2012
'errNetMountFailed' : 'Bağlama başarısız oldu.', // added 17.04.2012
'errNetMountHostReq' : 'Host gerekli.', // added 18.04.2012
'errSessionExpires' : 'Uzun süre işlem yapılmadığından oturumunuz sonlandı.',
'errCreatingTempDir' : 'Geçici dizin oluşturulamıyor: "$1"',
'errFtpDownloadFile' : 'Dosya FTP: "$1" adresinden indirilemiyor.',
'errFtpUploadFile' : 'Dosya FTP: "$1" adresine yüklenemiyor.',
'errFtpMkdir' : 'FTP: "$1" üzerinde uzak dizin oluşturulamıyor.',
'errArchiveExec' : '"$1" Dosyalarında arşivlenirken hata oluştu.',
'errExtractExec' : '"$1" Dosyaları arşivden çıkartılırken hata oluştu.',
'errNetUnMount' : 'Bağlantı kaldırılamıyor.', // from v2.1 added 30.04.2012
'errConvUTF8' : 'UTF-8\'e dönüştürülemez.', // from v2.1 added 08.04.2014
'errFolderUpload' : 'Dizin yükleyebilmek için daha modern bir tarayıcıya ihtiyacınız var.', // from v2.1 added 26.6.2015
'errSearchTimeout' : '"$1" aranırken zaman aşımına uğradı. Arama sonuçları kısmidir.', // from v2.1 added 12.1.2016
'errReauthRequire' : 'Yeniden yetkilendirme gerekiyor.', // from v2.1.10 added 24.3.2016
'errMaxTargets' : 'Maksimum seçilebilir öge sayısı $1 adettir.', // from v2.1.17 added 17.10.2016
'errRestore' : 'Çöp kutusundan geri yüklenemiyor. Geri yükleme notkası belirlenemiyor.', // from v2.1.24 added 3.5.2017
'errEditorNotFound' : 'Bu doya türü için düzenleyici bulunamadı.', // from v2.1.25 added 23.5.2017
'errServerError' : 'Sunucu tarafında beklenilmeyen bir hata oluştu.', // from v2.1.25 added 16.6.2017
'errEmpty' : '"$1" Dizini boşaltılamıyor.', // from v2.1.25 added 22.6.2017
'moreErrors' : '"$1" tane daha hata var.', // from v2.1.44 added 9.12.2018
'errMaxMkdirs' : 'Tek seferde en fazla 1$ dizin oluşturabilirsiniz.', // from v2.1.58 added 20.6.2021
/******************************* commands names ********************************/
'cmdarchive' : 'Arşiv oluştur',
'cmdback' : 'Geri',
'cmdcopy' : 'Kopyala',
'cmdcut' : 'Kes',
'cmddownload' : 'İndir',
'cmdduplicate' : 'Kopyasını oluştur',
'cmdedit' : 'Dosyayı düzenle',
'cmdextract' : 'Arşivden dosyaları çıkart',
'cmdforward' : 'İleri',
'cmdgetfile' : 'Dosyaları seç',
'cmdhelp' : 'Bu yazılım hakkında',
'cmdhome' : 'Kök',
'cmdinfo' : 'Bilgi göster',
'cmdmkdir' : 'Yeni klasör',
'cmdmkdirin' : 'Yeni Klasör / aç', // from v2.1.7 added 19.2.2016
'cmdmkfile' : 'Yeni dosya',
'cmdopen' : 'Aç',
'cmdpaste' : 'Yapıştır',
'cmdquicklook' : 'Önizleme',
'cmdreload' : 'Geri Yükle',
'cmdrename' : 'Yeniden Adlandır',
'cmdrm' : 'Sil',
'cmdtrash' : 'Çöpe at', //from v2.1.24 added 29.4.2017
'cmdrestore' : 'Geri yükle', //from v2.1.24 added 3.5.2017
'cmdsearch' : 'Dosyaları bul',
'cmdup' : 'Üst dizine çık',
'cmdupload' : 'Dosyaları yükle',
'cmdview' : 'Görüntüle',
'cmdresize' : 'Boyutlandır & Döndür',
'cmdsort' : 'Sırala',
'cmdnetmount' : 'Ağ birimi bağla', // added 18.04.2012
'cmdnetunmount': 'bağlantıyı kes', // from v2.1 added 30.04.2012
'cmdplaces' : 'Yerlere', // added 28.12.2014
'cmdchmod' : 'Mod değiştir', // from v2.1 added 20.6.2015
'cmdopendir' : 'Bir Dizin Aç', // from v2.1 added 13.1.2016
'cmdcolwidth' : 'Sütun genişliğini sıfırla', // from v2.1.13 added 12.06.2016
'cmdfullscreen': 'Tam Ekran', // from v2.1.15 added 03.08.2016
'cmdmove' : 'Taşı', // from v2.1.15 added 21.08.2016
'cmdempty' : 'Dizini boşalt', // from v2.1.25 added 22.06.2017
'cmdundo' : 'Geri al', // from v2.1.27 added 31.07.2017
'cmdredo' : 'Yinele', // from v2.1.27 added 31.07.2017
'cmdpreference': 'Tercihler', // from v2.1.27 added 03.08.2017
'cmdselectall' : 'Tümünü seç', // from v2.1.28 added 15.08.2017
'cmdselectnone': 'Seçimi temizle', // from v2.1.28 added 15.08.2017
'cmdselectinvert': 'Diğerlerini seç', // from v2.1.28 added 15.08.2017
'cmdopennew' : 'Yeni Sekmede aç', // from v2.1.38 added 3.4.2018
'cmdhide' : 'Ögeyi Gizle', // from v2.1.41 added 24.7.2018
/*********************************** buttons ***********************************/
'btnClose' : 'Kapat',
'btnSave' : 'Kaydet',
'btnRm' : 'Kaldır',
'btnApply' : 'Uygula',
'btnCancel' : 'İptal',
'btnNo' : 'Hayır',
'btnYes' : 'Evet',
'btnDiscard': 'Discard changes',
'btnMount' : 'Bağla', // added 18.04.2012
'btnApprove': 'Git $1 & onayla', // from v2.1 added 26.04.2012
'btnUnmount': 'Bağlantıyı kes', // from v2.1 added 30.04.2012
'btnConv' : 'Dönüştür', // from v2.1 added 08.04.2014
'btnCwd' : 'Buraya', // from v2.1 added 22.5.2015
'btnVolume' : 'Birim', // from v2.1 added 22.5.2015
'btnAll' : 'Hepsi', // from v2.1 added 22.5.2015
'btnMime' : 'MIME Türü', // from v2.1 added 22.5.2015
'btnFileName':'Dosya adı', // from v2.1 added 22.5.2015
'btnSaveClose': 'Kaydet & Kapat', // from v2.1 added 12.6.2015
'btnBackup' : 'Yedekle', // fromv2.1 added 28.11.2015
'btnRename' : 'Yeniden adlandır', // from v2.1.24 added 6.4.2017
'btnRenameAll' : 'Yeniden adlandır(Tümü)', // from v2.1.24 added 6.4.2017
'btnPrevious' : 'Önceki ($1/$2)', // from v2.1.24 added 11.5.2017
'btnNext' : 'Sonraki ($1/$2)', // from v2.1.24 added 11.5.2017
'btnSaveAs' : 'Farklı Kaydet', // from v2.1.25 added 24.5.2017
/******************************** notifications ********************************/
'ntfopen' : 'Dizin Aç',
'ntffile' : 'Dosya Aç',
'ntfreload' : 'Dizin içeriğini yeniden yükle',
'ntfmkdir' : 'Dizin oluşturuluyor',
'ntfmkfile' : 'Dosyaları oluşturma',
'ntfrm' : 'Öğeleri sil',
'ntfcopy' : 'Öğeleri kopyala',
'ntfmove' : 'Öğeleri taşı',
'ntfprepare' : 'Varolan öğeler kontrol ediliyor',
'ntfrename' : 'Dosyaları yeniden adlandır',
'ntfupload' : 'Dosyalar yükleniyor',
'ntfdownload' : 'Dosyalar indiriliyor',
'ntfsave' : 'Dosyalar kaydediliyor',
'ntfarchive' : 'Arşiv oluşturuluyor',
'ntfextract' : 'Arşivden dosyalar çıkartılıyor',
'ntfsearch' : 'Dosyalar aranıyor',
'ntfresize' : 'Resimler boyutlandırılıyor',
'ntfsmth' : 'İşlem yapılıyor',
'ntfloadimg' : 'Resim yükleniyor',
'ntfnetmount' : 'Ağ birimine bağlanılıyor', // added 18.04.2012
'ntfnetunmount': 'Ağ birimi bağlantısı kesiliyor', // from v2.1 added 30.04.2012
'ntfdim' : 'Resim boyutu alınıyor', // added 20.05.2013
'ntfreaddir' : 'Dizin bilgisi okunuyor', // from v2.1 added 01.07.2013
'ntfurl' : 'Bağlantının URL\'si alınıyor', // from v2.1 added 11.03.2014
'ntfchmod' : 'Dosya modu değiştiriliyor', // from v2.1 added 20.6.2015
'ntfpreupload': 'Yüklenen dosya ismi doğrulanıyor', // from v2.1 added 31.11.2015
'ntfzipdl' : 'İndirilecek dosya oluşturuluyor', // from v2.1.7 added 23.1.2016
'ntfparents' : 'Dosya yolu bilgileri alınıyor', // from v2.1.17 added 2.11.2016
'ntfchunkmerge': 'Yüklenen dosya işleniyor', // from v2.1.17 added 2.11.2016
'ntftrash' : 'Çöp kutusuna atma', // from v2.1.24 added 2.5.2017
'ntfrestore' : 'Çöp kutusundan geri yükle', // from v2.1.24 added 3.5.2017
'ntfchkdir' : 'Hedef dizin kontrol ediliyor', // from v2.1.24 added 3.5.2017
'ntfundo' : 'Önceki işlemi geri alma', // from v2.1.27 added 31.07.2017
'ntfredo' : 'Önceki geri almayı tekrarlama', // from v2.1.27 added 31.07.2017
'ntfchkcontent' : 'İçeriği kontrol ediniz', // from v2.1.41 added 3.8.2018
/*********************************** volumes *********************************/
'volume_Trash' : 'Çöp', //from v2.1.24 added 29.4.2017
/************************************ dates **********************************/
'dateUnknown' : 'Bilinmiyor',
'Today' : 'Bugün',
'Yesterday' : 'Dün',
'msJan' : 'Oca',
'msFeb' : 'Şub',
'msMar' : 'Mar',
'msApr' : 'Nis',
'msMay' : 'May',
'msJun' : 'Haz',
'msJul' : 'Tem',
'msAug' : 'Ağu',
'msSep' : 'Eyl',
'msOct' : 'Ekm',
'msNov' : 'Kas',
'msDec' : 'Ara',
'January' : 'Ocak',
'February' : 'Şubat',
'March' : 'Mart',
'April' : 'Nisan',
'May' : 'Mayıs',
'June' : 'Haziran',
'July' : 'Temmuz',
'August' : 'Ağustos',
'September' : 'Eylül',
'October' : 'Ekim',
'November' : 'Kasım',
'December' : 'Aralık',
'Sunday' : 'Pazar',
'Monday' : 'Pazartesi',
'Tuesday' : 'Salı',
'Wednesday' : 'Çarşamba',
'Thursday' : 'Perşembe',
'Friday' : 'Cuma',
'Saturday' : 'Cumartesi',
'Sun' : 'Paz',
'Mon' : 'Pzt',
'Tue' : 'Sal',
'Wed' : 'Çar',
'Thu' : 'Per',
'Fri' : 'Cum',
'Sat' : 'Cmt',
/******************************** sort variants ********************************/
'sortname' : 'Ada göre',
'sortkind' : 'Türe göre',
'sortsize' : 'Boyuta göre',
'sortdate' : 'Tarihe göre',
'sortFoldersFirst' : 'Önce dizinler',
'sortperm' : 'izinlere göre', // from v2.1.13 added 13.06.2016
'sortmode' : 'moduna göre', // from v2.1.13 added 13.06.2016
'sortowner' : 'sahibine göre', // from v2.1.13 added 13.06.2016
'sortgroup' : 'grubuna göre', // from v2.1.13 added 13.06.2016
'sortAlsoTreeview' : 'Ayrıca ağaç görünümü', // from v2.1.15 added 01.08.2016
/********************************** new items **********************************/
'untitled file.txt' : 'YeniDosya.txt', // added 10.11.2015
'untitled folder' : 'YeniKlasor', // added 10.11.2015
'Archive' : 'YeniArsiv', // from v2.1 added 10.11.2015
'untitled file' : 'YeniDosya.$1', // from v2.1.41 added 6.8.2018
'extentionfile' : '$1: Dosya', // from v2.1.41 added 6.8.2018
'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018
/********************************** messages **********************************/
'confirmReq' : 'Onay gerekli',
'confirmRm' : 'Öğeleri kaldırmak istediğinden emin misin?
Bu işlem geri alınamaz!',
'confirmRepl' : 'Eski dosya yenisi ile değiştirilsin mi?',
'confirmRest' : 'Mevcut öge çöp kutusundaki ögeyle değiştirilsin mi?', // fromv2.1.24 added 5.5.2017
'confirmConvUTF8' : 'UTF-8 değil
UTF-8\'e dönüştürülsün mü?
Dönüştürme sonrası kaydedebilmek için içeriğin UTF-8 olması gerekir.', // from v2.1 added 08.04.2014
'confirmNonUTF8' : 'Bu dosyanın karakter kodlaması tespit edilemedi. Düzenleme için geçici olarak UTF-8\'e dönüştürülmesi gerekir.
Lütfen bu dosyanın karakter kodlamasını seçin.', // from v2.1.19 added 28.11.2016
'confirmNotSave' : 'Düzenlenmiş içerik.
Değişiklikleri kaydetmek istemiyorsanız son yapılanlar kaybolacak.', // from v2.1 added 15.7.2015
'confirmTrash' : 'Öğeleri çöp kutusuna taşımak istediğinizden emin misiniz?', //from v2.1.24 added 29.4.2017
'confirmMove' : '"$1" değiştirmek istediğinizden emin misiniz?', //from v2.1.50 added 27.7.2019
'apllyAll' : 'Tümüne uygula',
'name' : 'İsim',
'size' : 'Boyut',
'perms' : 'Yetkiler',
'modify' : 'Değiştirildi',
'kind' : 'Tür',
'read' : 'oku',
'write' : 'yaz',
'noaccess' : 'erişim yok',
'and' : 've',
'unknown' : 'bilinmeyen',
'selectall' : 'Tüm öğeleri seç',
'selectfiles' : 'Öğe(ler)i seç',
'selectffile' : 'İlk öğeyi seç',
'selectlfile' : 'Son öğeyi seç',
'viewlist' : 'Liste görünümü',
'viewicons' : 'Simge görünümü',
'viewSmall' : 'Küçük simgeler', // from v2.1.39 added 22.5.2018
'viewMedium' : 'Orta simgleler', // from v2.1.39 added 22.5.2018
'viewLarge' : 'Büyük simgleler', // from v2.1.39 added 22.5.2018
'viewExtraLarge' : 'Çok büyük simgeler', // from v2.1.39 added 22.5.2018
'places' : 'Yerler',
'calc' : 'Hesapla',
'path' : 'Dosya Yolu',
'aliasfor' : 'Takma adı',
'locked' : 'Kilitli',
'dim' : 'Ölçüler',
'files' : 'Dosyalar',
'folders' : 'Dizinler',
'items' : 'Nesneler',
'yes' : 'evet',
'no' : 'hayır',
'link' : 'Bağlantı',
'searcresult' : 'Arama sonuçları',
'selected' : 'Seçili öğeler',
'about' : 'Hakkında',
'shortcuts' : 'Kısayollar',
'help' : 'Yardım',
'webfm' : 'Web dosyası yöneticisi',
'ver' : 'Sürüm',
'protocolver' : 'protokol sürümü',
'homepage' : 'Proje Anasayfası',
'docs' : 'Belgeler',
'github' : 'Github\'ta bizi takip edin',
'twitter' : 'Twitter\'da bizi takip edin',
'facebook' : 'Facebook\'ta bize katılın',
'team' : 'Takım',
'chiefdev' : 'geliştirici şefi',
'developer' : 'geliştirici',
'contributor' : 'iştirakçi',
'maintainer' : 'bakıcı',
'translator' : 'tercüman',
'icons' : 'Simgeler',
'dontforget' : 've havlunuzu almayı unutmayın',
'shortcutsof' : 'Kısayollar devre dışı',
'dropFiles' : 'Dosyaları buraya taşı',
'or' : 'veya',
'selectForUpload' : 'Yüklemek için dosyaları seçin',
'moveFiles' : 'Öğeleri taşı',
'copyFiles' : 'Öğeleri kopyala',
'restoreFiles' : 'Öğeleri geri yükle', // from v2.1.24 added 5.5.2017
'rmFromPlaces' : 'Yerlerinden sil',
'aspectRatio' : 'Görünüm oranı',
'scale' : 'Ölçeklendir',
'width' : 'Genişlik',
'height' : 'Yükseklik',
'resize' : 'Boyutlandır',
'crop' : 'Kırp',
'rotate' : 'Döndür',
'rotate-cw' : '90 derece sağa döndür',
'rotate-ccw' : '90 derece sola döndür',
'degree' : '°',
'netMountDialogTitle' : 'Bağlı (Mount) ağ birimi', // added 18.04.2012
'protocol' : 'Protokol', // added 18.04.2012
'host' : 'Host', // added 18.04.2012
'port' : 'Kapı(Port)', // added 18.04.2012
'user' : 'Kullanıcı', // added 18.04.2012
'pass' : 'Şifre', // added 18.04.2012
'confirmUnmount' : 'Bağlantı kesilsin mi $1?', // from v2.1 added 30.04.2012
'dropFilesBrowser': 'Dosyaları tarayıcıdan yapıştır veya bırak', // from v2.1 added 30.05.2012
'dropPasteFiles' : 'Dosyaları buraya yapıştır veya bırak', // from v2.1 added 07.04.2014
'encoding' : 'Kodlama', // from v2.1 added 19.12.2014
'locale' : 'Yerel', // from v2.1 added 19.12.2014
'searchTarget' : 'Hedef: $1', // from v2.1 added 22.5.2015
'searchMime' : 'Giriş MIME Türüne Göre Arama', // from v2.1 added 22.5.2015
'owner' : 'Sahibi', // from v2.1 added 20.6.2015
'group' : 'Grup', // from v2.1 added 20.6.2015
'other' : 'Diğer', // from v2.1 added 20.6.2015
'execute' : 'Çalıştır', // from v2.1 added 20.6.2015
'perm' : 'Yetki', // from v2.1 added 20.6.2015
'mode' : 'Mod', // from v2.1 added 20.6.2015
'emptyFolder' : 'Dizin boş', // from v2.1.6 added 30.12.2015
'emptyFolderDrop' : 'Dizin boş\\Öğe eklemek için sürükleyin', // from v2.1.6 added 30.12.2015
'emptyFolderLTap' : 'Dizin boş\\Öğe eklemek için basılı tutun', // from v2.1.6 added 30.12.2015
'quality' : 'Kalite', // from v2.1.6 added 5.1.2016
'autoSync' : 'Otomatik senkronizasyon', // from v2.1.6 added 10.1.2016
'moveUp' : 'Yukarı taşı', // from v2.1.6 added 18.1.2016
'getLink' : 'URL bağlantısı alın', // from v2.1.7 added 9.2.2016
'selectedItems' : 'Seçili öğeler ($1)', // from v2.1.7 added 2.19.2016
'folderId' : 'Dizin kimliği', // from v2.1.10 added 3.25.2016
'offlineAccess' : 'Çevrimdışı erişime izin ver', // from v2.1.10 added 3.25.2016
'reAuth' : 'Yeniden kimlik doğrulaması için', // from v2.1.10 added 3.25.2016
'nowLoading' : 'Şimdi yükleniyor...', // from v2.1.12 added 4.26.2016
'openMulti' : 'Çoklu dosya aç', // from v2.1.12 added 5.14.2016
'openMultiConfirm': '$1 dosyalarını açmaya çalışıyorsunuz. Tarayıcıda açmak istediğinizden emin misiniz?', // from v2.1.12 added 5.14.2016
'emptySearch' : 'Arama hedefinde eşleşen sonuç bulunamadı.', // from v2.1.12 added 5.16.2016
'editingFile' : 'Dosya düzenleniyor.', // from v2.1.13 added 6.3.2016
'hasSelected' : '$1 öğe seçtiniz.', // from v2.1.13 added 6.3.2016
'hasClipboard' : 'Panonuzda $1 öğeniz var.', // from v2.1.13 added 6.3.2016
'incSearchOnly' : 'Artan arama yalnızca geçerli görünümden yapılır.', // from v2.1.13 added 6.30.2016
'reinstate' : 'Eski durumuna getir', // from v2.1.15 added 3.8.2016
'complete' : '$1 tamamlandı', // from v2.1.15 added 21.8.2016
'contextmenu' : 'Konteks menüsü', // from v2.1.15 added 9.9.2016
'pageTurning' : 'Sayfa çevir', // from v2.1.15 added 10.9.2016
'volumeRoots' : 'Kök birimler', // from v2.1.16 added 16.9.2016
'reset' : 'Sıfırla', // from v2.1.16 added 1.10.2016
'bgcolor' : 'Arkaplan rengi', // from v2.1.16 added 1.10.2016
'colorPicker' : 'Renk seçici', // from v2.1.16 added 1.10.2016
'8pxgrid' : '8px Izgara', // from v2.1.16 added 4.10.2016
'enabled' : 'Etkin', // from v2.1.16 added 4.10.2016
'disabled' : 'Engelli', // from v2.1.16 added 4.10.2016
'emptyIncSearch' : 'Geçerli görünümde arama sonucu bulunamadı. Arama sonucunu genişletmek için \\APress [Enter] yapın', // from v2.1.16 added 5.10.2016
'emptyLetSearch' : 'Geçerli görünümde ilk harf arama sonuçları boş.', // from v2.1.23 added 24.3.2017
'textLabel' : 'Metin etiketi', // from v2.1.17 added 13.10.2016
'minsLeft' : '$1 dakika kaldı', // from v2.1.17 added 13.11.2016
'openAsEncoding' : 'Seçilen kodlamayla yeniden aç', // from v2.1.19 added 2.12.2016
'saveAsEncoding' : 'Seçilen kodlamayla kaydet', // from v2.1.19 added 2.12.2016
'selectFolder' : 'Dizin seç', // from v2.1.20 added 13.12.2016
'firstLetterSearch': 'İlk arama sayfası', // from v2.1.23 added 24.3.2017
'presets' : 'Hazır ayarlar', // from v2.1.25 added 26.5.2017
'tooManyToTrash' : 'çok fazla öge var çöp kutusuna atılamaz.', // from v2.1.25 added 9.6.2017
'TextArea' : 'Metin alanı(TextArea)', // from v2.1.25 added 14.6.2017
'folderToEmpty' : '"$1" dizinini boşalt.', // from v2.1.25 added 22.6.2017
'filderIsEmpty' : '"$1" dizininde öğe yok.', // from v2.1.25 added 22.6.2017
'preference' : 'Tercih', // from v2.1.26 added 28.6.2017
'language' : 'Dil ayarları', // from v2.1.26 added 28.6.2017
'clearBrowserData': 'Bu tarayıcıda kayıtlı ayarları başlat', // from v2.1.26 added 28.6.2017
'toolbarPref' : 'Araç çubuğu ayarları', // from v2.1.27 added 2.8.2017
'charsLeft' : '... $1 karakter kaldı', // from v2.1.29 added 30.8.2017
'linesLeft' : '... $1 satır kaldı.', // from v2.1.52 added 16.1.2020
'sum' : 'Toplam', // from v2.1.29 added 28.9.2017
'roughFileSize' : 'Kaba dosya boyutu', // from v2.1.30 added 2.11.2017
'autoFocusDialog' : 'Fare ile üzerine gelince diyalog öğesi odaklansın', // from v2.1.30 added 2.11.2017
'select' : 'Seç', // from v2.1.30 added 23.11.2017
'selectAction' : 'Dosya seçildiğinde işleme al', // from v2.1.30 added 23.11.2017
'useStoredEditor' : 'Geçen sefer kullanılan editörle aç', // from v2.1.30 added 23.11.2017
'selectinvert' : 'Zıt seçim', // from v2.1.30 added 25.11.2017
'renameMultiple' : '$1 seçilen öğeleri $2 gibi yeniden adlandırmak istediğinizden emin misiniz?Bu geri alınamaz!', // from v2.1.31 added 4.12.2017
'batchRename' : 'Yığın adını değiştir', // from v2.1.31 added 8.12.2017
'plusNumber' : '+ Sayı', // from v2.1.31 added 8.12.2017
'asPrefix' : 'Ön ek kele', // from v2.1.31 added 8.12.2017
'asSuffix' : 'Son ek ekle', // from v2.1.31 added 8.12.2017
'changeExtention' : 'Uzantıyı değiştir', // from v2.1.31 added 8.12.2017
'columnPref' : 'Sütun ayarları (Liste görünümü)', // from v2.1.32 added 6.2.2018
'reflectOnImmediate' : 'Tüm değişiklikler hemen arşive yansıtılacaktır.', // from v2.1.33 added 2.3.2018
'reflectOnUnmount' : 'Herhangi bir değişiklik, bu birimi kaldırılıncaya kadar yansıtılmayacaktır.', // from v2.1.33 added 2.3.2018
'unmountChildren' : 'Bağlatıyı kesmek istediğiniz birime bağlı şu birim(ler)\'in de bağlantısı kesilecek. Bağlantıyı kesmek istediğinize emin misiniz?', // from v2.1.33 added 5.3.2018
'selectionInfo' : 'Seçim Bilgisi', // from v2.1.33 added 7.3.2018
'hashChecker' : 'Dosya imza(hash) algoritmaları', // from v2.1.33 added 10.3.2018
'infoItems' : 'öğelerin bilgisi (Seçim Bilgi Paneli)', // from v2.1.38 added 28.3.2018
'pressAgainToExit': 'Çıkmak için tekrar basın.', // from v2.1.38 added 1.4.2018
'toolbar' : 'Araç Çubuğu', // from v2.1.38 added 4.4.2018
'workspace' : 'Çalışma alanı', // from v2.1.38 added 4.4.2018
'dialog' : 'Diyalog', // from v2.1.38 added 4.4.2018
'all' : 'Tümü', // from v2.1.38 added 4.4.2018
'iconSize' : 'Simge Boyutu (Simge Görünümü)', // from v2.1.39 added 7.5.2018
'editorMaximized' : 'Maksimum düzenleyici penceresini aç', // from v2.1.40 added 30.6.2018
'editorConvNoApi' : 'API ile dönüşüm şu anda mevcut olmadığından, lütfen web sitesinde dönüştürün.', //from v2.1.40 added 8.7.2018
'editorConvNeedUpload' : 'Dönüştürmeden sonra, dönüştürülen dosyayı kaydetmek için öğe URL\'si veya indirilen bir dosya ile karşıya yüklemeniz gerekir.', //from v2.1.40 added 8.7.2018
'convertOn' : ' $1 site çevrildi', // from v2.1.40 added 10.7.2018
'integrations' : 'Entegrasyonlar', // from v2.1.40 added 11.7.2018
'integrationWith' : 'Bu elFinder aşağıdaki harici hizmetlere entegre edilmiştir. Lütfen kullanmadan önce kullanım koşullarını, gizlilik politikasını vb. Kontrol edin.', // from v2.1.40 added 11.7.2018
'showHidden' : 'Gizli ögeleri aç.', // from v2.1.41 added 24.7.2018
'hideHidden' : 'Gizli ögeleri kapat.', // from v2.1.41 added 24.7.2018
'toggleHidden' : 'Gizli ögeleri aç/kapat', // from v2.1.41 added 24.7.2018
'makefileTypes' : '"Yeni dosya" ile etkinleştirilecek dosya türleri', // from v2.1.41 added 7.8.2018
'typeOfTextfile' : 'Text dosyası tipi.', // from v2.1.41 added 7.8.2018
'add' : 'Ekle', // from v2.1.41 added 7.8.2018
'theme' : 'Tema', // from v2.1.43 added 19.10.2018
'default' : 'Varsayılan', // from v2.1.43 added 19.10.2018
'description' : 'Açıklama', // from v2.1.43 added 19.10.2018
'website' : 'Websayfası', // from v2.1.43 added 19.10.2018
'author' : 'Yazar', // from v2.1.43 added 19.10.2018
'email' : 'E-mail', // from v2.1.43 added 19.10.2018
'license' : 'Lisans', // from v2.1.43 added 19.10.2018
'exportToSave' : 'Bu öğe kaydedilemez. Düzenlemeleri kaybetmemek için PC\'nize aktarmanız gerekir.', // from v2.1.44 added 1.12.2018
'dblclickToSelect': 'Dosyayı seçmek için çift tıklayın.', // from v2.1.47 added 22.1.2019
'useFullscreen' : 'Tam ekran modunu kullan', // from v2.1.47 added 19.2.2019
/********************************** mimetypes **********************************/
'kindUnknown' : 'Bilinmiyor',
'kindRoot' : 'Birim Kök dizini', // from v2.1.16 added 16.10.2016
'kindFolder' : 'Dizin',
'kindSelects' : 'Seçim', // from v2.1.29 added 29.8.2017
'kindAlias' : 'Alias (Takma ad)',
'kindAliasBroken' : 'Bozuk alias',
// applications
'kindApp' : 'Uygulama',
'kindPostscript' : 'Postscript dosyası',
'kindMsOffice' : 'Microsoft Office dosyası',
'kindMsWord' : 'Microsoft Word dosyası',
'kindMsExcel' : 'Microsoft Excel dosyası',
'kindMsPP' : 'Microsoft Powerpoint sunumu',
'kindOO' : 'Open Office dosyası',
'kindAppFlash' : 'Flash uygulaması',
'kindPDF' : 'PDF',
'kindTorrent' : 'Bittorrent dosyası',
'kind7z' : '7z arşivi',
'kindTAR' : 'TAR arşivi',
'kindGZIP' : 'GZIP arşivi',
'kindBZIP' : 'BZIP arşivi',
'kindXZ' : 'XZ arşivi',
'kindZIP' : 'ZIP arşivi',
'kindRAR' : 'RAR arşivi',
'kindJAR' : 'Java JAR dosyası',
'kindTTF' : 'True Type fontu',
'kindOTF' : 'Open Type fontu',
'kindRPM' : 'RPM paketi',
// fonts
'kindFont' : 'Fontu',
'kindSFNT' : 'SFNT fontu',
'kindEOT' : 'Embedded Open Type fontu',
'kindWOFF' : 'Web Open Font Format',
'kindWOFF2' : 'Web Open Font Format 2',
// texts
'kindText' : 'Metin dosyası',
'kindTextPlain' : 'Düz metin',
'kindPHP' : 'PHP kodu',
'kindCSS' : 'CSS dosyası',
'kindHTML' : 'HTML dosyası',
'kindJS' : 'Javascript kodu',
'kindRTF' : 'Zengin Metin Belgesi',
'kindC' : 'C kodu',
'kindCHeader' : 'C başlık kodu',
'kindCPP' : 'C++ kodu',
'kindCPPHeader' : 'C++ başlık kodu',
'kindShell' : 'Unix shell scripti',
'kindPython' : 'Python kodu',
'kindJava' : 'Java kodu',
'kindRuby' : 'Ruby kodu',
'kindPerl' : 'Perl scripti',
'kindSQL' : 'SQL kodu',
'kindXML' : 'XML dosyası',
'kindAWK' : 'AWK kodu',
'kindCSV' : 'CSV',
'kindDOCBOOK' : 'Docbook XML dosyası',
'kindMarkdown' : 'Markdown dosyası', // added 20.7.2015
// images
'kindImage' : 'Resim',
'kindBMP' : 'BMP dosyası',
'kindJPEG' : 'JPEG dosyası',
'kindGIF' : 'GIF dosyası',
'kindPNG' : 'PNG dosyası',
'kindTIFF' : 'TIFF dosyası',
'kindTGA' : 'TGA dosyası',
'kindPSD' : 'Adobe Photoshop dosyası',
'kindXBITMAP' : 'X bitmap dosyası',
'kindPXM' : 'Pixelmator dosyası',
// media
'kindAudio' : 'Ses ortamı',
'kindAudioMPEG' : 'MPEG ses',
'kindAudioMPEG4' : 'MPEG-4 ses',
'kindAudioMIDI' : 'MIDI ses',
'kindAudioOGG' : 'Ogg Vorbis ses',
'kindAudioWAV' : 'WAV ses',
'AudioPlaylist' : 'MP3 listesi',
'kindVideo' : 'Video ortamı',
'kindVideoDV' : 'DV video',
'kindVideoMPEG' : 'MPEG video',
'kindVideoMPEG4' : 'MPEG-4 video',
'kindVideoAVI' : 'AVI video',
'kindVideoMOV' : 'Quick Time video',
'kindVideoWM' : 'Windows Media video',
'kindVideoFlash' : 'Flash video',
'kindVideoMKV' : 'Matroska video',
'kindVideoOGG' : 'Ogg video'
}
};
}));
/**
* Progress Bars
*
* Creates some progress bars
*/
if ( ! defined( 'ABSPATH' ) ) { exit; } // Exit if accessed directly
if ( ! class_exists( 'avia_sc_progressbar' ) )
{
class avia_sc_progressbar extends aviaShortcodeTemplate
{
/**
* Create the config array for the shortcode button
*/
function shortcode_insert_button()
{
$this->config['self_closing'] = 'no';
$this->config['name'] = __( 'Progress Bars', 'avia_framework' );
$this->config['tab'] = __( 'Content Elements', 'avia_framework' );
$this->config['icon'] = AviaBuilder::$path['imagesURL']."sc-progressbar.png";
$this->config['order'] = 30;
$this->config['target'] = 'avia-target-insert';
$this->config['shortcode'] = 'av_progress';
$this->config['shortcode_nested'] = array( 'av_progress_bar' );
$this->config['tooltip'] = __( 'Create some progress bars', 'avia_framework' );
$this->config['preview'] = true;
$this->config['disabling_allowed'] = true;
$this->config['id_name'] = 'id';
$this->config['id_show'] = 'yes';
$this->config['alb_desc_id'] = 'alb_description';
}
function extra_assets()
{
//load css
wp_enqueue_style( 'avia-module-progress-bar' , AviaBuilder::$path['pluginUrlRoot'].'avia-shortcodes/progressbar/progressbar.css' , array('avia-layout'), false );
//load js
wp_enqueue_script( 'avia-module-numbers' , AviaBuilder::$path['pluginUrlRoot'].'avia-shortcodes/numbers/numbers.js' , array('avia-shortcodes'), false, true );
wp_enqueue_script( 'avia-module-progress-bar' , AviaBuilder::$path['pluginUrlRoot'].'avia-shortcodes/progressbar/progressbar.js' , array('avia-shortcodes'), false, true );
}
/**
* Popup Elements
*
* If this function is defined in a child class the element automatically gets an edit button, that, when pressed
* opens a modal window that allows to edit the element properties
*
* @return void
*/
function popup_elements()
{
$this->elements = array(
array(
"type" => "tab_container", 'nodescription' => true
),
array(
"type" => "tab",
"name" => __("Content" , 'avia_framework'),
'nodescription' => true
),
array(
"name" => __("Add/Edit Progress Bars", 'avia_framework' ),
"desc" => __("Here you can add, remove and edit the various progress bars.", 'avia_framework' ),
"type" => "modal_group",
"id" => "content",
"modal_title" => __("Edit Progress Bars", 'avia_framework' ),
"std" => array(
array('title'=>__('Skill or Task', 'avia_framework' ), 'icon'=>'43', 'progress'=>'100', 'icon_select'=>'no'),
),
'subelements' => array(
array(
"name" => __("Progress Bars Title", 'avia_framework' ),
"desc" => __("Enter the Progress Bars title here", 'avia_framework' ) ,
"id" => "title",
"std" => "",
"type" => "input"),
array(
"name" => __("Progress in %", 'avia_framework' ),
"desc" => __("Select a number between 0 and 100", 'avia_framework' ),
"id" => "progress",
"type" => "select",
"std" => "100",
"subtype" => AviaHtmlHelper::number_array(0,100,1, array(), '%')
),
array(
"name" => __("Bar Color", 'avia_framework' ),
"desc" => __("Choose a color for your progress bar here", 'avia_framework' ),
"id" => "color",
"type" => "select",
"std" => "theme-color",
"subtype" => array(
__('Theme Color', 'avia_framework' )=>'theme-color',
__('Blue', 'avia_framework' )=>'blue',
__('Red', 'avia_framework' )=>'red',
__('Green', 'avia_framework' )=>'green',
__('Orange', 'avia_framework' )=>'orange',
__('Aqua', 'avia_framework' )=>'aqua',
__('Teal', 'avia_framework' )=>'teal',
__('Purple', 'avia_framework' )=>'purple',
__('Pink', 'avia_framework' )=>'pink',
__('Silver', 'avia_framework' )=>'silver',
__('Grey', 'avia_framework' )=>'grey',
__('Black', 'avia_framework' )=>'black',
)),
array(
"name" => __("Icon", 'avia_framework' ),
"desc" => __("Should an icon be displayed at the left side of the progress bar", 'avia_framework' ),
"id" => "icon_select",
"type" => "select",
"std" => "no",
"subtype" => array(
__('No Icon', 'avia_framework' ) =>'no',
__('Yes, display Icon', 'avia_framework' ) =>'yes')),
array(
"name" => __("List Item Icon",'avia_framework' ),
"desc" => __("Select an icon for your list item below",'avia_framework' ),
"id" => "icon",
"type" => "iconfont",
"required" => array('icon_select','equals','yes'),
"std" => "",
),
)
),
array(
"name" => __("Progress Bar Coloring", 'avia_framework' ),
"desc" => __("Choose the coloring of the progress bar here", 'avia_framework' ),
"id" => "bar_styling",
"type" => "select",
"std" => "av-striped-bar",
"subtype" => array(
__( 'Striped', 'avia_framework' ) => 'av-striped-bar',
__( 'Single Color', 'avia_framework' ) => 'av-flat-bar'
)
),
array(
"name" => __("Progress Bar Animation enabled?", 'avia_framework' ),
"desc" => __("Choose if you want to enable the continuous animation of the progress bar", 'avia_framework' ),
"id" => "bar_animation",
"type" => "select",
"std" => "av-animated-bar",
"required" => array('bar_styling','not','av-flat-bar'),
"subtype" => array(
__('Enabled', 'avia_framework' ) =>'av-animated-bar',
__('Disabled', 'avia_framework' ) =>'av-fixed-bar')),
array(
"name" => __("Progress Bar Style", 'avia_framework' ),
"desc" => __("Choose the styling of the progress bar here", 'avia_framework' ),
"id" => "bar_styling_secondary",
"type" => "select",
"std" => "",
"subtype" => array(
__('Rounded Big Bars', 'avia_framework' ) =>'',
__('Minimal Bars', 'avia_framework' ) =>'av-small-bar')),
array(
"name" => __("Show Progress Bar percentage?", 'avia_framework' ),
"desc" => __("Choose if you want to show the numeric percentage of the progress bar", 'avia_framework' ),
"id" => "show_percentage",
"type" => "select",
"std" => "",
"required" => array('bar_styling_secondary','equals','av-small-bar'),
"subtype" => array(
__('Hide', 'avia_framework' ) =>'',
__('Show', 'avia_framework' ) =>'av-show-bar-percentage')),
array(
"name" => __("Progress Bar Height?", 'avia_framework' ),
"desc" => __("Set the height of the progress bar", 'avia_framework' ),
"id" => "bar_height",
"type" => "select",
"std" => "10",
"required" => array('bar_styling_secondary','equals','av-small-bar'),
"subtype" => AviaHtmlHelper::number_array(1,50,1, array(), 'px')),
array(
"type" => "close_div",
'nodescription' => true
),
array(
'type' => 'template',
'template_id' => 'screen_options_tab'
),
array(
"type" => "close_div",
'nodescription' => true
)
);
}
/**
* Editor Sub Element - this function defines the visual appearance of an element that is displayed within a modal window and on click opens its own modal window
* Works in the same way as Editor Element
* @param array $params this array holds the default values for $content and $args.
* @return $params the return array usually holds an innerHtml key that holds item specific markup.
*/
function editor_sub_element($params)
{
$template = $this->update_template("title","{{title}}: ");
$template_percent= $this->update_template("progress", "{{progress}}%");
extract(av_backend_icon($params)); // creates $font and $display_char if the icon was passed as param "icon" and the font as "font"
if(empty($params['args']['icon_select'])) $params['args']['icon_select'] = "no";
$params['innerHtml'] = "";
$params['innerHtml'] .= "";
$params['innerHtml'] .= " class_by_arguments('icon_select' ,$params['args']).">";
$params['innerHtml'] .= " class_by_arguments('font' ,$font).">";
$params['innerHtml'] .= " ".$display_char."";
$params['innerHtml'] .= " ";
$params['innerHtml'] .= " ".$params['args']['title'].": ";
$params['innerHtml'] .= " ".$params['args']['progress']."%";
$params['innerHtml'] .= " ";
$params['innerHtml'] .= "
";
return $params;
}
/**
* Returns false by default.
* Override in a child class if you need to change this behaviour.
*
* @since 4.2.1
* @param string $shortcode
* @return boolean
*/
public function is_nested_self_closing( $shortcode )
{
if( in_array( $shortcode, $this->config['shortcode_nested'] ) )
{
return true;
}
return false;
}
/**
* Frontend Shortcode Handler
*
* @param array $atts array of attributes
* @param string $content text within enclosing form of shortcode element
* @param string $shortcodename the shortcode found, when == callback name
* @return string $output returns the modified html string
*/
function shortcode_handler( $atts, $content = "", $shortcodename = "", $meta = "" )
{
extract( AviaHelper::av_mobile_sizes( $atts ) ); //return $av_font_classes, $av_title_font_classes and $av_display_classes
extract( shortcode_atts( array(
'position' => 'left',
'bar_styling' => 'av-striped-bar',
'bar_styling_secondary' => '',
'show_percentage' => false,
'bar_height' => false,
'bar_animation' => 'av-animated-bar'
), $atts, $this->config['shortcode'] ) );
$bars = ShortcodeHelper::shortcode2array( $content );
$extraClass = $bar_styling." ".$bar_animation." ".$bar_styling_secondary;
$output = "";
$bar_style = "";
if($bar_height && $bar_styling_secondary)
{
$bar_style = "style='height:{$bar_height}px;'";
}
if( ! empty( $bars ) )
{
$output .= "";
}
return $output;
}
}
}