. */ /** * Class to provide access to ownCloud filesystem via a "view", and methods for * working with files within that view (e.g. read, write, delete, etc.). Each * view is restricted to a set of directories via a virtual root. The default view * uses the currently logged in user's data directory as root (parts of * OC_Filesystem are merely a wrapper for OC_FilesystemView). * * Apps that need to access files outside of the user data folders (to modify files * belonging to a user other than the one currently logged in, for example) should * use this class directly rather than using OC_Filesystem, or making use of PHP's * built-in file manipulation functions. This will ensure all hooks and proxies * are triggered correctly. * * Filesystem functions are not called directly; they are passed to the correct * \OC\Files\Storage\Storage object */ class OC_FilesystemView { private $fakeRoot=''; private $internal_path_cache=array(); private $storage_cache=array(); public function __construct($root) { $this->fakeRoot=$root; } public function getAbsolutePath($path) { if(!$path) { $path='/'; } if($path[0]!=='/') { $path='/'.$path; } return $this->fakeRoot.$path; } /** * change the root to a fake toor * @param string fakeRoot * @return bool */ public function chroot($fakeRoot) { if(!$fakeRoot=='') { if($fakeRoot[0]!=='/') { $fakeRoot='/'.$fakeRoot; } } $this->fakeRoot=$fakeRoot; } /** * get the fake root * @return string */ public function getRoot() { return $this->fakeRoot; } /** * get the part of the path relative to the mountpoint of the storage it's stored in * @param string path * @return bool */ public function getInternalPath($path) { if (!isset($this->internal_path_cache[$path])) { $this->internal_path_cache[$path] = OC_Filesystem::getInternalPath($this->getAbsolutePath($path)); } return $this->internal_path_cache[$path]; } /** * get path relative to the root of the view * @param string path * @return string */ public function getRelativePath($path) { if($this->fakeRoot=='') { return $path; } if(strpos($path, $this->fakeRoot)!==0) { return null; }else{ $path=substr($path, strlen($this->fakeRoot)); if(strlen($path)===0) { return '/'; }else{ return $path; } } } /** * get the storage object for a path * @param string path * @return \OC\Files\Storage\Storage */ public function getStorage($path) { if (!isset($this->storage_cache[$path])) { $this->storage_cache[$path] = OC_Filesystem::getStorage($this->getAbsolutePath($path)); } return $this->storage_cache[$path]; } /** * get the mountpoint of the storage object for a path ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account * * @param string path * @return string */ public function getMountPoint($path) { return OC_Filesystem::getMountPoint($this->getAbsolutePath($path)); } /** * return the path to a local version of the file * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed * @param string path * @return string */ public function getLocalFile($path) { $parent=substr($path, 0, strrpos($path,'/')); if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) { return $storage->getLocalFile($this->getInternalPath($path)); } } /** * @param string path * @return string */ public function getLocalFolder($path) { $parent=substr($path, 0, strrpos($path,'/')); if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) { return $storage->getLocalFolder($this->getInternalPath($path)); } } /** * the following functions operate with arguments and return values identical * to those of their PHP built-in equivalents. Mostly they are merely wrappers * for \OC\Files\Storage\Storage via basicOperation(). */ public function mkdir($path) { return $this->basicOperation('mkdir', $path, array('create', 'write')); } public function rmdir($path) { return $this->basicOperation('rmdir', $path, array('delete')); } public function opendir($path) { return $this->basicOperation('opendir', $path, array('read')); } public function readdir($handle) { $fsLocal= new \OC\Files\Storage\Local( array( 'datadir' => '/' ) ); return $fsLocal->readdir( $handle ); } public function is_dir($path) { if($path=='/') { return true; } return $this->basicOperation('is_dir', $path); } public function is_file($path) { if($path=='/') { return false; } return $this->basicOperation('is_file', $path); } public function stat($path) { return $this->basicOperation('stat', $path); } public function filetype($path) { return $this->basicOperation('filetype', $path); } public function filesize($path) { return $this->basicOperation('filesize', $path); } public function readfile($path) { @ob_end_clean(); $handle=$this->fopen($path, 'rb'); if ($handle) { $chunkSize = 8192;// 8 MB chunks while (!feof($handle)) { echo fread($handle, $chunkSize); flush(); } $size=$this->filesize($path); return $size; } return false; } /** * @deprecated Replaced by isReadable() as part of CRUDS */ public function is_readable($path) { return $this->basicOperation('isReadable',$path); } /** * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS */ public function is_writable($path) { return $this->basicOperation('isUpdatable',$path); } public function isCreatable($path) { return $this->basicOperation('isCreatable', $path); } public function isReadable($path) { return $this->basicOperation('isReadable', $path); } public function isUpdatable($path) { return $this->basicOperation('isUpdatable', $path); } public function isDeletable($path) { return $this->basicOperation('isDeletable', $path); } public function isSharable($path) { return $this->basicOperation('isSharable', $path); } public function file_exists($path) { if($path=='/') { return true; } return $this->basicOperation('file_exists', $path); } public function filectime($path) { return $this->basicOperation('filectime', $path); } public function filemtime($path) { return $this->basicOperation('filemtime', $path); } public function touch($path, $mtime=null) { return $this->basicOperation('touch', $path, array('write'), $mtime); } public function file_get_contents($path) { return $this->basicOperation('file_get_contents', $path, array('read')); } public function file_put_contents($path, $data) { if(is_resource($data)) {//not having to deal with streams in file_put_contents makes life easier $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path)); if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) { $path = $this->getRelativePath($absolutePath); $exists = $this->file_exists($path); $run = true; if( $this->fakeRoot==OC_Filesystem::getRoot() ){ if(!$exists) { OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_create, array( OC_Filesystem::signal_param_path => $path, OC_Filesystem::signal_param_run => &$run ) ); } OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_write, array( OC_Filesystem::signal_param_path => $path, OC_Filesystem::signal_param_run => &$run ) ); } if(!$run) { return false; } $target=$this->fopen($path, 'w'); if($target) { $count=OC_Helper::streamCopy($data, $target); fclose($target); fclose($data); if( $this->fakeRoot==OC_Filesystem::getRoot() ){ if(!$exists) { OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_create, array( OC_Filesystem::signal_param_path => $path) ); } OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, array( OC_Filesystem::signal_param_path => $path) ); } OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count); return $count > 0; }else{ return false; } } }else{ return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data); } } public function unlink($path) { return $this->basicOperation('unlink', $path, array('delete')); } public function deleteAll( $directory, $empty = false ) { return $this->basicOperation( 'deleteAll', $directory, array('delete'), $empty ); } public function rename($path1, $path2) { $postFix1=(substr($path1,-1,1)==='/')?'/':''; $postFix2=(substr($path2,-1,1)==='/')?'/':''; $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1)); $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2)); if(OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) { $path1 = $this->getRelativePath($absolutePath1); $path2 = $this->getRelativePath($absolutePath2); if($path1 == null or $path2 == null) { return false; } $run=true; if( $this->fakeRoot==OC_Filesystem::getRoot() ){ OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename, array( OC_Filesystem::signal_param_oldpath => $path1, OC_Filesystem::signal_param_newpath => $path2, OC_Filesystem::signal_param_run => &$run ) ); } if($run) { $mp1 = $this->getMountPoint($path1.$postFix1); $mp2 = $this->getMountPoint($path2.$postFix2); if($mp1 == $mp2) { if($storage = $this->getStorage($path1)) { $result = $storage->rename($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2)); } } else { $source = $this->fopen($path1.$postFix1, 'r'); $target = $this->fopen($path2.$postFix2, 'w'); $count = OC_Helper::streamCopy($source, $target); $storage1 = $this->getStorage($path1); $storage1->unlink($this->getInternalPath($path1.$postFix1)); $result = $count>0; } if( $this->fakeRoot==OC_Filesystem::getRoot() ){ OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_rename, array( OC_Filesystem::signal_param_oldpath => $path1, OC_Filesystem::signal_param_newpath => $path2 ) ); } return $result; } } } public function copy($path1, $path2) { $postFix1=(substr($path1,-1,1)==='/')?'/':''; $postFix2=(substr($path2,-1,1)==='/')?'/':''; $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1)); $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2)); if(OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) { $path1 = $this->getRelativePath($absolutePath1); $path2 = $this->getRelativePath($absolutePath2); if($path1 == null or $path2 == null) { return false; } $run=true; if( $this->fakeRoot==OC_Filesystem::getRoot() ){ OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_copy, array( OC_Filesystem::signal_param_oldpath => $path1, OC_Filesystem::signal_param_newpath=>$path2, OC_Filesystem::signal_param_run => &$run ) ); $exists=$this->file_exists($path2); if($run and !$exists) { OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_create, array( OC_Filesystem::signal_param_path => $path2, OC_Filesystem::signal_param_run => &$run ) ); } if($run) { OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_write, array( OC_Filesystem::signal_param_path => $path2, OC_Filesystem::signal_param_run => &$run ) ); } } if($run) { $mp1=$this->getMountPoint($path1.$postFix1); $mp2=$this->getMountPoint($path2.$postFix2); if($mp1 == $mp2) { if($storage = $this->getStorage($path1.$postFix1)) { $result=$storage->copy($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2)); } } else { $source = $this->fopen($path1.$postFix1, 'r'); $target = $this->fopen($path2.$postFix2, 'w'); $result = OC_Helper::streamCopy($source, $target); } if( $this->fakeRoot==OC_Filesystem::getRoot() ){ OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_copy, array( OC_Filesystem::signal_param_oldpath => $path1, OC_Filesystem::signal_param_newpath=>$path2 ) ); if(!$exists) { OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_create, array(OC_Filesystem::signal_param_path => $path2) ); } OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, array( OC_Filesystem::signal_param_path => $path2) ); } else { // no real copy, file comes from somewhere else, e.g. version rollback -> just update the file cache without all the other post_write actions OC_FileCache_Update::update($path2, $this->fakeRoot); } return $result; } } } public function fopen($path, $mode) { $hooks=array(); switch($mode) { case 'r': case 'rb': $hooks[]='read'; break; case 'r+': case 'rb+': case 'w+': case 'wb+': case 'x+': case 'xb+': case 'a+': case 'ab+': $hooks[]='read'; $hooks[]='write'; break; case 'w': case 'wb': case 'x': case 'xb': case 'a': case 'ab': $hooks[]='write'; break; default: OC_Log::write('core','invalid mode ('.$mode.') for '.$path,OC_Log::ERROR); } return $this->basicOperation('fopen', $path, $hooks, $mode); } public function toTmpFile($path) { if(OC_Filesystem::isValidPath($path)) { $source = $this->fopen($path, 'r'); if($source) { $extension=''; $extOffset=strpos($path, '.'); if($extOffset !== false) { $extension=substr($path, strrpos($path,'.')); } $tmpFile = OC_Helper::tmpFile($extension); file_put_contents($tmpFile, $source); return $tmpFile; } } } public function fromTmpFile($tmpFile, $path) { if(OC_Filesystem::isValidPath($path)) { if(!$tmpFile) { debug_print_backtrace(); } $source=fopen($tmpFile, 'r'); if($source) { $this->file_put_contents($path, $source); unlink($tmpFile); return true; } else { } } else { return false; } } public function getMimeType($path) { return $this->basicOperation('getMimeType', $path); } public function hash($type, $path, $raw = false) { $postFix=(substr($path,-1,1)==='/')?'/':''; $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path)); if (OC_FileProxy::runPreProxies('hash', $absolutePath) && OC_Filesystem::isValidPath($path)) { $path = $this->getRelativePath($absolutePath); if ($path == null) { return false; } if (OC_Filesystem::$loaded && $this->fakeRoot == OC_Filesystem::getRoot()) { OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_read, array( OC_Filesystem::signal_param_path => $path) ); } if ($storage = $this->getStorage($path.$postFix)) { $result = $storage->hash($type, $this->getInternalPath($path.$postFix), $raw); $result = OC_FileProxy::runPostProxies('hash', $absolutePath, $result); return $result; } } return null; } public function free_space($path='/') { return $this->basicOperation('free_space', $path); } /** * @brief abstraction layer for basic filesystem functions: wrapper for \OC\Files\Storage\Storage * @param string $operation * @param string #path * @param array (optional) hooks * @param mixed (optional) $extraParam * @return mixed * * This method takes requests for basic filesystem functions (e.g. reading & writing * files), processes hooks and proxies, sanitises paths, and finally passes them on to * \OC\Files\Storage\Storage for delegation to a storage backend for execution */ private function basicOperation($operation, $path, $hooks=array(), $extraParam=null) { $postFix=(substr($path,-1,1)==='/')?'/':''; $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path)); if(OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and OC_Filesystem::isValidPath($path)) { $path = $this->getRelativePath($absolutePath); if($path == null) { return false; } $internalPath = $this->getInternalPath($path.$postFix); $run=$this->runHooks($hooks,$path); if($run and $storage = $this->getStorage($path.$postFix)) { if(!is_null($extraParam)) { $result = $storage->$operation($internalPath, $extraParam); } else { $result = $storage->$operation($internalPath); } $result = OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result); if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) { if($operation!='fopen') {//no post hooks for fopen, the file stream is still open $this->runHooks($hooks,$path,true); } } return $result; } } return null; } private function runHooks($hooks,$path,$post=false) { $prefix=($post)?'post_':''; $run=true; if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) { foreach($hooks as $hook) { if($hook!='read') { OC_Hook::emit( OC_Filesystem::CLASSNAME, $prefix.$hook, array( OC_Filesystem::signal_param_run => &$run, OC_Filesystem::signal_param_path => $path ) ); } elseif(!$post) { OC_Hook::emit( OC_Filesystem::CLASSNAME, $prefix.$hook, array( OC_Filesystem::signal_param_path => $path ) ); } } } return $run; } /** * check if a file or folder has been updated since $time * @param int $time * @return bool */ public function hasUpdated($path, $time) { return $this->basicOperation('hasUpdated', $path, array(), $time); } } n> Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/l10n/gl/files_encryption.po
blob: a8f83b07bb48338b344bd883f7e905e3d32538a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# 
# Translators:
# mbouzada <mbouzada@gmail.com>, 2013
# mbouzada <mbouzada@gmail.com>, 2013
# mbouzada <mbouzada@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-07-07 01:58+0200\n"
"PO-Revision-Date: 2013-07-06 09:11+0000\n"
"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ajax/adminrecovery.php:29
msgid "Recovery key successfully enabled"
msgstr "Activada satisfactoriamente a chave de recuperación"

#: ajax/adminrecovery.php:34
msgid ""
"Could not enable recovery key. Please check your recovery key password!"
msgstr "Non foi posíbel activar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!"

#: ajax/adminrecovery.php:48
msgid "Recovery key successfully disabled"
msgstr "Desactivada satisfactoriamente a chave de recuperación"

#: ajax/adminrecovery.php:53
msgid ""
"Could not disable recovery key. Please check your recovery key password!"
msgstr "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!"

#: ajax/changeRecoveryPassword.php:49
msgid "Password successfully changed."
msgstr "O contrasinal foi cambiado satisfactoriamente"

#: ajax/changeRecoveryPassword.php:51
msgid "Could not change the password. Maybe the old password was not correct."
msgstr "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o  correcto."

#: ajax/updatePrivateKeyPassword.php:51
msgid "Private key password successfully updated."
msgstr "A chave privada foi actualizada correctamente."

#: ajax/updatePrivateKeyPassword.php:53
msgid ""
"Could not update the private key password. Maybe the old password was not "
"correct."
msgstr "Non foi posíbel actualizar o contrasinal da chave privada. É probábel que o contrasinal antigo non sexa correcto."

#: files/error.php:7
msgid ""
"Your private key is not valid! Likely your password was changed outside the "
"ownCloud system (e.g. your corporate directory). You can update your private"
" key password in your personal settings to recover access to your encrypted "
"files."
msgstr "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior (p.ex. o seu directorio corporativo). Vostede pode actualizar o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros"

#: hooks/hooks.php:44
msgid "Missing requirements."
msgstr "Non se cumpren os requisitos."

#: hooks/hooks.php:45
msgid ""
"Please make sure that PHP 5.3.3 or newer is installed and that the OpenSSL "
"PHP extension is enabled and configured properly. For now, the encryption "
"app has been disabled."
msgstr "Asegúrese de que está instalado o  PHP 5.3.3 ou posterior e de que a extensión OpenSSL PHP estea activada e configurada correctamente. Polo de agora foi desactivado o aplicativo de cifrado."

#: js/settings-admin.js:11
msgid "Saving..."
msgstr "Gardando..."

#: templates/invalid_private_key.php:5
msgid ""
"Your private key is not valid! Maybe the your password was changed from "
"outside."
msgstr "A chave privada non é correcta! É probábel que o seu contrasinal teña sido cambiado desde o exterior. "

#: templates/invalid_private_key.php:7
msgid "You can unlock your private key in your "
msgstr "Pode desbloquear a chave privada nos seus"

#: templates/invalid_private_key.php:7
msgid "personal settings"
msgstr "axustes persoais"

#: templates/settings-admin.php:5 templates/settings-personal.php:4
msgid "Encryption"
msgstr "Cifrado"

#: templates/settings-admin.php:10
msgid ""
"Enable recovery key (allow to recover users files in case of password loss):"
msgstr "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):"

#: templates/settings-admin.php:14
msgid "Recovery key password"
msgstr "Contrasinal da chave de recuperación"

#: templates/settings-admin.php:21 templates/settings-personal.php:54
msgid "Enabled"
msgstr "Activado"

#: templates/settings-admin.php:29 templates/settings-personal.php:62
msgid "Disabled"
msgstr "Desactivado"

#: templates/settings-admin.php:34
msgid "Change recovery key password:"
msgstr "Cambiar o contrasinal da chave de la recuperación:"

#: templates/settings-admin.php:41
msgid "Old Recovery key password"
msgstr "Antigo contrasinal da chave de recuperación"

#: templates/settings-admin.php:48
msgid "New Recovery key password"
msgstr "Novo contrasinal da chave de recuperación"

#: templates/settings-admin.php:53
msgid "Change Password"
msgstr "Cambiar o contrasinal"

#: templates/settings-personal.php:11
msgid "Your private key password no longer match your log-in password:"
msgstr "O seu contrasinal da chave privada non coincide co seu contrasinal de acceso."

#: templates/settings-personal.php:14
msgid "Set your old private key password to your current log-in password."
msgstr "Estabeleza o seu contrasinal antigo da chave de recuperación ao seu contrasinal de acceso actual"

#: templates/settings-personal.php:16
msgid ""
" If you don't remember your old password you can ask your administrator to "
"recover your files."
msgstr " Se non lembra o seu antigo contrasinal pode pedírllelo ao seu administrador para recuperar os seus ficheiros."

#: templates/settings-personal.php:24
msgid "Old log-in password"
msgstr "Contrasinal de acceso antigo"

#: templates/settings-personal.php:30
msgid "Current log-in password"
msgstr "Contrasinal de acceso actual"

#: templates/settings-personal.php:35
msgid "Update Private Key Password"
msgstr "Actualizar o contrasinal da chave privada"

#: templates/settings-personal.php:45
msgid "Enable password recovery:"
msgstr "Activar o  contrasinal de recuperación:"

#: templates/settings-personal.php:47
msgid ""
"Enabling this option will allow you to reobtain access to your encrypted "
"files in case of password loss"
msgstr "Ao activar esta opción permitiráselle volver a obter acceso aos ficheiros cifrados no caso de perda do contrasinal"

#: templates/settings-personal.php:63
msgid "File recovery settings updated"
msgstr "Actualizouse o ficheiro de axustes de recuperación"

#: templates/settings-personal.php:64
msgid "Could not update file recovery"
msgstr "Non foi posíbel actualizar o ficheiro de recuperación"