commit e7d7d2a94354b1135bd17c95cad5073669de65da parent dc1709588453897fe08c5b5d1e750d318db32252 Author: Dan Stillman <dstillman@zotero.org> Date: Tue, 26 Mar 2013 15:10:38 -0400 Merge branch '4.0' Conflicts: install.rdf update.rdf Diffstat:
67 files changed, 622 insertions(+), 458 deletions(-)
diff --git a/chrome/content/zotero/preferences/preferences_sync.js b/chrome/content/zotero/preferences/preferences_sync.js @@ -93,21 +93,23 @@ Zotero_Preferences.Sync = { var sql = "INSERT OR IGNORE INTO settings VALUES (?,?,?)"; Zotero.DB.query(sql, ['storage', 'zfsPurge', 'user']); - Zotero.Sync.Storage.ZFS.purgeDeletedStorageFiles(function (success) { - if (success) { - ps.alert( - null, - Zotero.getString("general.success"), - "Attachment files from your personal library have been removed from the Zotero servers." - ); - } - else { - ps.alert( - null, - Zotero.getString("general.error"), - "An error occurred. Please try again later." - ); - } + Zotero.Sync.Storage.ZFS.purgeDeletedStorageFiles() + .then(function () { + ps.alert( + null, + Zotero.getString("general.success"), + "Attachment files from your personal library have been removed from the Zotero servers." + ); + }) + .catch(function (e) { + Zotero.debug(e, 1); + Components.utils.reportError(e); + + ps.alert( + null, + Zotero.getString("general.error"), + "An error occurred. Please try again later." + ); }); } } diff --git a/chrome/content/zotero/xpcom/storage.js b/chrome/content/zotero/xpcom/storage.js @@ -145,7 +145,7 @@ Zotero.Sync.Storage = new function () { promises.push(Q.allResolved([mode, promise])); } } - return Q.allResolved(promises) + return Q.all(promises) // Get library last-sync times .then(function (cacheCredentialsPromises) { var promises = []; @@ -153,13 +153,12 @@ Zotero.Sync.Storage = new function () { // Mark WebDAV verification failure as user library error. // We ignore credentials-caching errors for ZFS and let the // later requests fail. - cacheCredentialsPromises.forEach(function (p) { - p = p.valueOf(); - let mode = p[0].valueOf(); + cacheCredentialsPromises.forEach(function (promise) { + let mode = promise[0].valueOf(); if (mode == Zotero.Sync.Storage.WebDAV) { - if (p[1].isRejected()) { + if (promise[1].isRejected()) { promises.push(Q.allResolved( - [0, p[1]] + [0, promise[1]] )); // Skip further syncing of user library delete libraryModes[0]; @@ -183,9 +182,7 @@ Zotero.Sync.Storage = new function () { )); } } - // 'promises' is an array of promises for arrays containing promises - // for a libraryID and the last sync time for that library - return Q.allResolved(promises); + return Q.all(promises); }); }) .then(function (promises) { @@ -197,11 +194,10 @@ Zotero.Sync.Storage = new function () { var libraryQueues = []; // Get the libraries we have sync times for - promises.forEach(function (p) { - p = p.valueOf(); - let libraryID = p[0].valueOf(); - let lastSyncTime = p[1].valueOf(); - if (p[1].isFulfilled()) { + promises.forEach(function (promise) { + let libraryID = promise[0].valueOf(); + let lastSyncTime = promise[1].valueOf(); + if (promise[1].isFulfilled()) { librarySyncTimes[libraryID] = lastSyncTime; } else { @@ -282,7 +278,7 @@ Zotero.Sync.Storage = new function () { } // The promise is done when all libraries are done - return Q.allResolved(libraryQueues); + return Q.all(libraryQueues); }) .then(function (promises) { Zotero.debug('Queue manager is finished'); @@ -291,13 +287,10 @@ Zotero.Sync.Storage = new function () { var finalPromises = []; promises.forEach(function (promise) { - // Discard first allResolved() promise - p = promise.valueOf(); - - var libraryID = p[0].valueOf(); - var libraryQueues = p[1].valueOf(); + var libraryID = promise[0].valueOf(); + var libraryQueues = promise[1].valueOf(); - if (p[1].isFulfilled()) { + if (promise[1].isFulfilled()) { libraryQueues.forEach(function (queuePromise) { let result = queuePromise.valueOf(); if (queuePromise.isFulfilled()) { @@ -326,27 +319,41 @@ Zotero.Sync.Storage = new function () { Zotero.debug("File sync failed for library " + libraryID); finalPromises.push([libraryID, libraryQueues]); } + + // If WebDAV sync enabled, purge deleted and orphaned files + if (libraryID == 0 && Zotero.Sync.Storage.WebDAV.includeUserFiles) { + Zotero.Sync.Storage.WebDAV.purgeDeletedStorageFiles() + .then(function () { + return Zotero.Sync.Storage.WebDAV.purgeOrphanedStorageFiles(); + }) + .catch(function (e) { + Zotero.debug(e, 1); + Components.utils.reportError(e); + }); + } + }); + + Zotero.Sync.Storage.ZFS.purgeDeletedStorageFiles() + .catch(function (e) { + Zotero.debug(e, 1); + Components.utils.reportError(e); }); if (promises.length && !changedLibraries.length) { Zotero.debug("No local changes made during file sync"); } - return Q.allResolved(finalPromises) + return Q.all(finalPromises) .then(function (promises) { var results = { changesMade: !!changedLibraries.length, errors: [] }; - promises.forEach(function (p) { - // If this is a promise, get an array - if (Q.isPromise(p)) { - p = p.valueOf(); - } - var libraryID = p[0].valueOf(); - if (p[1].isRejected()) { - var result = p[1].valueOf(); + promises.forEach(function (promise) { + var libraryID = promise[0].valueOf(); + if (promise[1].isRejected()) { + var result = promise[1].valueOf(); result = result.exception; if (typeof result == 'string') { result = new Error(result); @@ -1755,20 +1762,11 @@ Zotero.Sync.Storage = new function () { /** * @inner - * @param {Integer} [days=pref:e.z.sync.storage.deleteDelayDays] - * Number of days old files have to be * @return {String[]|FALSE} Array of keys, or FALSE if none */ - this.getDeletedFiles = function (days) { - if (!days) { - days = Zotero.Prefs.get("sync.storage.deleteDelayDays"); - } - - var ts = Zotero.Date.getUnixTimestamp(); - ts = ts - (86400 * days); - - var sql = "SELECT key FROM storageDeleteLog WHERE timestamp<?"; - return Zotero.DB.columnQuery(sql, ts); + this.getDeletedFiles = function () { + var sql = "SELECT key FROM storageDeleteLog"; + return Zotero.DB.columnQuery(sql); } diff --git a/chrome/content/zotero/xpcom/storage/webdav.js b/chrome/content/zotero/xpcom/storage/webdav.js @@ -220,15 +220,17 @@ Zotero.Sync.Storage.WebDAV = (function () { var smtime = Zotero.Sync.Storage.getSyncedModificationTime(item.id); if (smtime != mtime) { - var localData = { modTime: fmtime }; - var remoteData = { modTime: mtime }; - Zotero.Sync.Storage.QueueManager.addConflict( - request.name, localData, remoteData - ); Zotero.debug("Conflict -- last synced file mod time " + "does not match time on storage server" + " (" + smtime + " != " + mtime + ")"); - return false; + return { + localChanges: false, + remoteChanges: false, + conflict: { + local: { modTime: fmtime }, + remote: { modTime: mtime } + } + }; } } else { @@ -473,21 +475,21 @@ Zotero.Sync.Storage.WebDAV = (function () { }; if (files.length == 0) { - return Q.resolve(results); + return Q(results); } let deleteURI = _rootURI.clone(); // This should never happen, but let's be safe if (!deleteURI.spec.match(/\/$/)) { - throw new Error( - "Root URI does not end in slash in " - + "Zotero.Sync.Storage.WebDAV.deleteStorageFiles()" - ); + return Q.reject("Root URI does not end in slash in " + + "Zotero.Sync.Storage.WebDAV.deleteStorageFiles()"); } - results = Q.resolve(results); - files.forEach(function (fileName) { - results = results.then(function (results) { + var funcs = []; + for (let i=0; i<files.length; i++) { + let fileName = files[i]; + let baseName = fileName.match(/^([^\.]+)/)[1]; + funcs.push(function () { let deleteURI = _rootURI.clone(); deleteURI.QueryInterface(Components.interfaces.nsIURL); deleteURI.fileName = fileName; @@ -502,30 +504,25 @@ Zotero.Sync.Storage.WebDAV = (function () { break; case 404: - var fileDeleted = false; + var fileDeleted = true; break; } // If an item file URI, get the property URI var deletePropURI = getPropertyURIFromItemURI(deleteURI); - if (!deletePropURI) { + + // If we already deleted the prop file, skip it + if (!deletePropURI || results.deleted.indexOf(deletePropURI.fileName) != -1) { if (fileDeleted) { - results.deleted.push(fileName); + results.deleted.push(baseName); } else { - results.missing.push(fileName); + results.missing.push(baseName); } - return results; + return; } - // If property file appears separately in delete queue, - // remove it, since we're taking care of it here - var propIndex = files.indexOf(deletePropURI.fileName); - if (propIndex > i) { - delete files[propIndex]; - i--; - last = (i == files.length - 1); - } + let propFileName = deletePropURI.fileName; // Delete property file return Zotero.HTTP.promise("DELETE", deletePropURI, { successCodes: [200, 204, 404] }) @@ -534,29 +531,40 @@ Zotero.Sync.Storage.WebDAV = (function () { case 204: // IIS 5.1 and Sakai return 200 case 200: - results.deleted.push(fileName); + results.deleted.push(baseName); break; case 404: if (fileDeleted) { - results.deleted.push(fileName); + results.deleted.push(baseName); } else { - results.missing.push(fileName); + results.missing.push(baseName); } break; } }); }) .catch(function (e) { - results.error.push(fileName); - var msg = "An error occurred attempting to delete " - + "'" + fileName - + "' (" + e.status + " " + e.xmlhttp.statusText + ")."; + results.error.push(baseName); + throw e; }); }); + } + + Components.utils.import("resource://zotero/concurrent-caller.js"); + var caller = new ConcurrentCaller(4); + caller.stopOnError = true; + caller.setLogger(function (msg) { + Zotero.debug("[ConcurrentCaller] " + msg); + }); + caller.setErrorLogger(function (msg) { + Components.utils.reportError(msg); + }); + return caller.fcall(funcs) + .then(function () { + return results; }); - return results; } @@ -881,7 +889,8 @@ Zotero.Sync.Storage.WebDAV = (function () { deleteStorageFiles([item.key + ".prop"]) .finally(function (results) { deferred.resolve(false); - }); + }) + .done(); return; } else if (status != 200) { @@ -1457,182 +1466,199 @@ Zotero.Sync.Storage.WebDAV = (function () { /** - * Remove files on storage server that were deleted locally more than - * sync.storage.deleteDelayDays days ago + * Remove files on storage server that were deleted locally * * @param {Function} callback Passed number of files deleted */ obj._purgeDeletedStorageFiles = function () { - if (!this._active) { - return Q(false); - } - - Zotero.debug("Purging deleted storage files"); - var files = Zotero.Sync.Storage.getDeletedFiles(); - if (!files) { - Zotero.debug("No files to delete remotely"); - return Q(false); - } - - // Add .zip extension - var files = files.map(function (file) file + ".zip"); - - return deleteStorageFiles(files) - .then(function (results) { - // Remove deleted and nonexistent files from storage delete log - var toPurge = results.deleted.concat(results.missing); - if (toPurge.length > 0) { - var done = 0; - var maxFiles = 999; - var numFiles = toPurge.length; - - Zotero.DB.beginTransaction(); - - do { - var chunk = toPurge.splice(0, maxFiles); - var sql = "DELETE FROM storageDeleteLog WHERE key IN (" - + chunk.map(function () '?').join() + ")"; - Zotero.DB.query(sql, chunk); - done += chunk.length; - } - while (done < numFiles); - - Zotero.DB.commitTransaction(); + return Q.fcall(function () { + if (!this.includeUserFiles) { + return false; } - return results.deleted.length; - }); + Zotero.debug("Purging deleted storage files"); + var files = Zotero.Sync.Storage.getDeletedFiles(); + if (!files) { + Zotero.debug("No files to delete remotely"); + return false; + } + + // Add .zip extension + var files = files.map(function (file) file + ".zip"); + + return deleteStorageFiles(files) + .then(function (results) { + // Remove deleted and nonexistent files from storage delete log + var toPurge = results.deleted.concat(results.missing); + if (toPurge.length > 0) { + var done = 0; + var maxFiles = 999; + var numFiles = toPurge.length; + + Zotero.DB.beginTransaction(); + + do { + var chunk = toPurge.splice(0, maxFiles); + var sql = "DELETE FROM storageDeleteLog WHERE key IN (" + + chunk.map(function () '?').join() + ")"; + Zotero.DB.query(sql, chunk); + done += chunk.length; + } + while (done < numFiles); + + Zotero.DB.commitTransaction(); + } + + Zotero.debug(results); + + return results.deleted.length; + }); + }.bind(this)); }; /** * Delete orphaned storage files older than a day before last sync time - * - * @param {Function} callback */ - obj._purgeOrphanedStorageFiles = function (callback) { - const daysBeforeSyncTime = 1; - - if (!this._active) { - return false; - } - - // If recently purged, skip - var lastpurge = Zotero.Prefs.get('lastWebDAVOrphanPurge'); - var days = 10; - if (lastpurge && new Date(lastpurge * 1000) > (new Date() - (1000 * 60 * 60 * 24 * days))) { - return false; - } - - Zotero.debug("Purging orphaned storage files"); - - var uri = this.rootURI; - var path = uri.path; - - var xmlstr = "<propfind xmlns='DAV:'><prop>" - + "<getlastmodified/>" - + "</prop></propfind>"; - - var lastSyncDate = new Date(Zotero.Sync.Server.lastLocalSyncTime * 1000); - - Zotero.HTTP.WebDAV.doProp("PROPFIND", uri, xmlstr, function (req) { - Zotero.debug(req.responseText); - - var funcName = "Zotero.Sync.Storage.purgeOrphanedStorageFiles()"; + obj._purgeOrphanedStorageFiles = function () { + return Q.fcall(function () { + const daysBeforeSyncTime = 1; - var responseNode = req.responseXML.documentElement; - responseNode.xpath = function (path) { - return Zotero.Utilities.xpath(this, path, { D: 'DAV:' }); - }; + if (!this.includeUserFiles) { + return false; + } - var deleteFiles = []; - var trailingSlash = !!path.match(/\/$/); - for each(var response in responseNode.xpath("response")) { - var href = Zotero.Utilities.xpath(response, "href", { D: 'DAV:' }); - href = href.length ? href[0] : '' - - // Strip trailing slash if there isn't one on the root path - if (!trailingSlash) { - href = href.replace(/\/$/, "") - } - - // Absolute - if (href.match(/^https?:\/\//)) { - var ios = Components.classes["@mozilla.org/network/io-service;1"]. - getService(Components.interfaces.nsIIOService); - var href = ios.newURI(href, null, null); - href = href.path; - } - - // Skip root URI - if (href == path - // Some Apache servers respond with a "/zotero" href - // even for a "/zotero/" request - || (trailingSlash && href + '/' == path) - // Try URL-encoded as well, as above - || decodeURIComponent(href) == path) { - continue; - } - - if (href.indexOf(path) == -1 - // Try URL-encoded as well, in case there's a '~' or similar - // character in the URL and the server (e.g., Sakai) is - // encoding the value - && decodeURIComponent(href).indexOf(path) == -1) { - Zotero.Sync.Storage.EventManager.error( - "DAV:href '" + href + "' does not begin with path '" - + path + "' in " + funcName - ); - } - - var matches = href.match(/[^\/]+$/); - if (!matches) { - Zotero.Sync.Storage.EventManager.error( - "Unexpected href '" + href + "' in " + funcName - ) - } - var file = matches[0]; - - if (file.indexOf('.') == 0) { - Zotero.debug("Skipping hidden file " + file); - continue; - } - if (!file.match(/\.zip$/) && !file.match(/\.prop$/)) { - Zotero.debug("Skipping file " + file); - continue; - } - - var key = file.replace(/\.(zip|prop)$/, ''); - var item = Zotero.Items.getByLibraryAndKey(null, key); - if (item) { - Zotero.debug("Skipping existing file " + file); - continue; - } - - Zotero.debug("Checking orphaned file " + file); - - // TODO: Parse HTTP date properly - var lastModified = Zotero.Utilities.xpath( - response, "//getlastmodified", { D: 'DAV:' } - ); - lastModified = lastModified.length ? lastModified[0] : '' - lastModified = Zotero.Date.strToISO(lastModified); - lastModified = Zotero.Date.sqlToDate(lastModified); - - // Delete files older than a day before last sync time - var days = (lastSyncDate - lastModified) / 1000 / 60 / 60 / 24; - - if (days > daysBeforeSyncTime) { - deleteFiles.push(file); - } + // If recently purged, skip + var lastpurge = Zotero.Prefs.get('lastWebDAVOrphanPurge'); + var days = 10; + if (lastpurge && new Date(lastpurge * 1000) > (new Date() - (1000 * 60 * 60 * 24 * days))) { + return false; } - deleteStorageFiles(deleteFiles) - .then(function (results) { - Zotero.Prefs.set("lastWebDAVOrphanPurge", Math.round(new Date().getTime() / 1000)) - Zotero.debug(results); - }); - }, { Depth: 1 }); + Zotero.debug("Purging orphaned storage files"); + + var uri = this.rootURI; + var path = uri.path; + + var xmlstr = "<propfind xmlns='DAV:'><prop>" + + "<getlastmodified/>" + + "</prop></propfind>"; + + var lastSyncDate = new Date(Zotero.Sync.Server.lastLocalSyncTime * 1000); + + var deferred = Q.defer(); + + Zotero.HTTP.WebDAV.doProp("PROPFIND", uri, xmlstr, function (xmlhttp) { + Q.fcall(function () { + Zotero.debug(xmlhttp.responseText); + + var funcName = "Zotero.Sync.Storage.purgeOrphanedStorageFiles()"; + + var responseNode = xmlhttp.responseXML.documentElement; + responseNode.xpath = function (path) { + return Zotero.Utilities.xpath(this, path, { D: 'DAV:' }); + }; + + var deleteFiles = []; + var trailingSlash = !!path.match(/\/$/); + for each(var response in responseNode.xpath("D:response")) { + var href = Zotero.Utilities.xpathText( + response, "D:href", { D: 'DAV:' } + ) || ""; + Zotero.debug(href); + + // Strip trailing slash if there isn't one on the root path + if (!trailingSlash) { + href = href.replace(/\/$/, ""); + } + + // Absolute + if (href.match(/^https?:\/\//)) { + var ios = Components.classes["@mozilla.org/network/io-service;1"]. + getService(Components.interfaces.nsIIOService); + var href = ios.newURI(href, null, null); + href = href.path; + } + + // Skip root URI + if (href == path + // Some Apache servers respond with a "/zotero" href + // even for a "/zotero/" request + || (trailingSlash && href + '/' == path) + // Try URL-encoded as well, as above + || decodeURIComponent(href) == path) { + continue; + } + + if (href.indexOf(path) == -1 + // Try URL-encoded as well, in case there's a '~' or similar + // character in the URL and the server (e.g., Sakai) is + // encoding the value + && decodeURIComponent(href).indexOf(path) == -1) { + throw new Error( + "DAV:href '" + href + "' does not begin with path '" + + path + "' in " + funcName + ); + } + + var matches = href.match(/[^\/]+$/); + if (!matches) { + throw new Error( + "Unexpected href '" + href + "' in " + funcName + ); + } + var file = matches[0]; + + if (file.indexOf('.') == 0) { + Zotero.debug("Skipping hidden file " + file); + continue; + } + if (!file.match(/\.zip$/) && !file.match(/\.prop$/)) { + Zotero.debug("Skipping file " + file); + continue; + } + + var key = file.replace(/\.(zip|prop)$/, ''); + var item = Zotero.Items.getByLibraryAndKey(null, key); + if (item) { + Zotero.debug("Skipping existing file " + file); + continue; + } + + Zotero.debug("Checking orphaned file " + file); + + // TODO: Parse HTTP date properly + Zotero.debug(response.innerHTML); + var lastModified = Zotero.Utilities.xpathText( + response, ".//D:getlastmodified", { D: 'DAV:' } + ); + lastModified = Zotero.Date.strToISO(lastModified); + lastModified = Zotero.Date.sqlToDate(lastModified); + + // Delete files older than a day before last sync time + var days = (lastSyncDate - lastModified) / 1000 / 60 / 60 / 24; + + if (days > daysBeforeSyncTime) { + deleteFiles.push(file); + } + } + + return deleteStorageFiles(deleteFiles) + .then(function (results) { + Zotero.Prefs.set("lastWebDAVOrphanPurge", Math.round(new Date().getTime() / 1000)) + Zotero.debug(results); + }); + }) + .catch(function (e) { + deferred.reject(e); + }) + .then(function () { + deferred.resolve(); + }); + }, { Depth: 1 }); + + return deferred.promise; + }.bind(this)); }; return obj; diff --git a/chrome/content/zotero/xpcom/storage/zfs.js b/chrome/content/zotero/xpcom/storage/zfs.js @@ -1006,7 +1006,7 @@ Zotero.Sync.Storage.ZFS = (function () { Zotero.debug("Credentials are cached"); _cachedCredentials = true; }) - .fail(function (e) { + .catch(function (e) { if (e instanceof Zotero.HTTP.UnexpectedStatusException) { if (e.status == 401) { var msg = "File sync login failed\n\n" @@ -1030,57 +1030,49 @@ Zotero.Sync.Storage.ZFS = (function () { /** * Remove all synced files from the server */ - obj._purgeDeletedStorageFiles = function (callback) { - // If we don't have a user id we've never synced and don't need to bother - if (!Zotero.userID) { - return false; - } - - var sql = "SELECT value FROM settings WHERE setting=? AND key=?"; - var values = Zotero.DB.columnQuery(sql, ['storage', 'zfsPurge']); - if (!values) { - return false; - } - - // TODO: promisify - - Zotero.debug("Unlinking synced files on ZFS"); - - var uri = this.userURI; - uri.spec += "removestoragefiles?"; - // Unused - for each(var value in values) { - switch (value) { - case 'user': - uri.spec += "user=1&"; - break; - - case 'group': - uri.spec += "group=1&"; - break; - - default: - throw "Invalid zfsPurge value '" + value - + "' in ZFS purgeDeletedStorageFiles()"; + obj._purgeDeletedStorageFiles = function () { + return Q.fcall(function () { + // If we don't have a user id we've never synced and don't need to bother + if (!Zotero.userID) { + return false; } - } - uri.spec = uri.spec.substr(0, uri.spec.length - 1); - - Zotero.HTTP.doPost(uri, "", function (xmlhttp) { - if (xmlhttp.status != 204) { - if (callback) { - callback(false); - } - throw "Unexpected status code " + xmlhttp.status + " purging ZFS files"; + + var sql = "SELECT value FROM settings WHERE setting=? AND key=?"; + var values = Zotero.DB.columnQuery(sql, ['storage', 'zfsPurge']); + if (!values) { + return false; } - var sql = "DELETE FROM settings WHERE setting=? AND key=?"; - Zotero.DB.query(sql, ['storage', 'zfsPurge']); + // TODO: promisify + + Zotero.debug("Unlinking synced files on ZFS"); - if (callback) { - callback(true); + var uri = this.userURI; + uri.spec += "removestoragefiles?"; + // Unused + for each(var value in values) { + switch (value) { + case 'user': + uri.spec += "user=1&"; + break; + + case 'group': + uri.spec += "group=1&"; + break; + + default: + throw "Invalid zfsPurge value '" + value + + "' in ZFS purgeDeletedStorageFiles()"; + } } - }); + uri.spec = uri.spec.substr(0, uri.spec.length - 1); + + return Zotero.HTTP.promise("POST", uri, "") + .then(function (req) { + var sql = "DELETE FROM settings WHERE setting=? AND key=?"; + Zotero.DB.query(sql, ['storage', 'zfsPurge']); + }); + }.bind(this)); }; return obj; diff --git a/chrome/content/zotero/xpcom/sync.js b/chrome/content/zotero/xpcom/sync.js @@ -429,7 +429,7 @@ Zotero.Sync.EventListener = new function () { var sql = "REPLACE INTO syncDeleteLog VALUES (?, ?, ?, ?)"; var syncStatement = Zotero.DB.getStatement(sql); - if (isItem && Zotero.Sync.Storage.WebDAV.active) { + if (isItem && Zotero.Sync.Storage.WebDAV.includeUserFiles) { var storageEnabled = true; var sql = "INSERT INTO storageDeleteLog VALUES (?, ?, ?)"; var storageStatement = Zotero.DB.getStatement(sql); diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js @@ -1844,15 +1844,6 @@ Components.utils.import("resource://gre/modules/Services.jsm"); Zotero.Items.purge(); // DEBUG: this might not need to be permanent Zotero.Relations.purge(); - - if (!skipStoragePurge && Math.random() < 1/10) { - Zotero.Sync.Storage.ZFS.purgeDeletedStorageFiles(); - Zotero.Sync.Storage.WebDAV.purgeDeletedStorageFiles(); - } - - if (!skipStoragePurge) { - Zotero.Sync.Storage.WebDAV.purgeOrphanedStorageFiles(); - } } diff --git a/chrome/locale/af-ZA/zotero/zotero.dtd b/chrome/locale/af-ZA/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/af-ZA/zotero/zotero.properties b/chrome/locale/af-ZA/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S attachment: pane.item.attachments.count.plural=%S attachments: pane.item.attachments.select=Select a File pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=click here pane.item.tags.count.zero=%S tags: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/ar/zotero/zotero.dtd b/chrome/locale/ar/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "احفظ في زوتيرو"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/ar/zotero/zotero.properties b/chrome/locale/ar/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S مرفقات: pane.item.attachments.count.plural=%S مرفق: pane.item.attachments.select=تحديد الملف pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=انقر هنا pane.item.tags.count.zero=لا توجد أوسمة: diff --git a/chrome/locale/bg-BG/zotero/zotero.dtd b/chrome/locale/bg-BG/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/bg-BG/zotero/zotero.properties b/chrome/locale/bg-BG/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S приложение: pane.item.attachments.count.plural=%S приложения: pane.item.attachments.select=Избор на файл pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=натиснете тук pane.item.tags.count.zero=%S отметки: diff --git a/chrome/locale/ca-AD/zotero/zotero.properties b/chrome/locale/ca-AD/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S arxiu adjunt: pane.item.attachments.count.plural=%S fitxers adjunts: pane.item.attachments.select=Selecciona un fitxer pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=clica aquí pane.item.tags.count.zero=Cap etiqueta: diff --git a/chrome/locale/cs-CZ/zotero/zotero.properties b/chrome/locale/cs-CZ/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S příloha: pane.item.attachments.count.plural=%S příloh: pane.item.attachments.select=Vyberte soubor pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=klikněte zde pane.item.tags.count.zero=%S štítků: diff --git a/chrome/locale/da-DK/zotero/zotero.properties b/chrome/locale/da-DK/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S Vedhæftning: pane.item.attachments.count.plural=%S Vedhæftninger: pane.item.attachments.select=Vælg en fil pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=Klik her pane.item.tags.count.zero=%S Tags: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/de/zotero/zotero.properties b/chrome/locale/de/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S Anhang: pane.item.attachments.count.plural=%S Anhänge: pane.item.attachments.select=Datei auswählen pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=hier klicken pane.item.tags.count.zero=%S Tags: diff --git a/chrome/locale/el-GR/zotero/zotero.dtd b/chrome/locale/el-GR/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/el-GR/zotero/zotero.properties b/chrome/locale/el-GR/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S attachment: pane.item.attachments.count.plural=%S attachments: pane.item.attachments.select=Select a File pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=click here pane.item.tags.count.zero=%S tags: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/es-ES/zotero/zotero.properties b/chrome/locale/es-ES/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S adjunto: pane.item.attachments.count.plural=%S adjuntos: pane.item.attachments.select=Elige un archivo pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=pulsa aquí pane.item.tags.count.zero=%S marcas: diff --git a/chrome/locale/et-EE/zotero/zotero.properties b/chrome/locale/et-EE/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S manus: pane.item.attachments.count.plural=%S manust: pane.item.attachments.select=Faili valimine pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=vajutage siia pane.item.tags.count.zero=%S lipikut: diff --git a/chrome/locale/eu-ES/zotero/zotero.dtd b/chrome/locale/eu-ES/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/eu-ES/zotero/zotero.properties b/chrome/locale/eu-ES/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=eranskin %S: pane.item.attachments.count.plural=%S eranskin: pane.item.attachments.select=Hautatu fitxategi bat pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=klikatu hemen pane.item.tags.count.zero=esteka %S: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=%S zerbitzarira ezin izan da heldu. sync.storage.error.permissionDeniedAtAddress=Arazo bat zure baimenekin: You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S egiaztapenak huts egin du. Egiaztatu Sync hobespenak Zotero panelean. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/fa/zotero/zotero.dtd b/chrome/locale/fa/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "ذخیره در زوترو"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/fa/zotero/zotero.properties b/chrome/locale/fa/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=یک پیوست: pane.item.attachments.count.plural=%S پیوست: pane.item.attachments.select=انتخاب پرونده pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=کلیک کنید pane.item.tags.count.zero=بدون برچسب: diff --git a/chrome/locale/fi-FI/zotero/zotero.properties b/chrome/locale/fi-FI/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S liite: pane.item.attachments.count.plural=%S liitettä: pane.item.attachments.select=Valitse tiedosto pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=napsauta tästä pane.item.tags.count.zero=%S merkkiä: diff --git a/chrome/locale/fr-FR/zotero/zotero.dtd b/chrome/locale/fr-FR/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Enregistrer dans Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Les pièces jointes ne peuvent pas être enregistrées dans la bibliothèque sélectionnée. Ce document sera enregistré dans votre bibliothèque à la place."> -<!ENTITY zotero.downloadManager.noPDFTools.description "Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF dans les préférences de Zotero."> +<!ENTITY zotero.downloadManager.noPDFTools.description "Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF depuis le panneau Recherche des préférences de Zotero."> diff --git a/chrome/locale/fr-FR/zotero/zotero.properties b/chrome/locale/fr-FR/zotero/zotero.properties @@ -12,7 +12,7 @@ general.restartRequiredForChanges=%S doit être redémarré pour que les modific general.restartNow=Redémarrer maintenant general.restartLater=Redémarrer plus tard general.restartApp=Redémarrer %S -general.quitApp=Quit %S +general.quitApp=Quitter %S general.errorHasOccurred=Une erreur est survenue. general.unknownErrorOccurred=Une erreur indéterminée est survenue. general.invalidResponseServer=Réponse invalide du serveur. @@ -36,7 +36,7 @@ general.character.singular=caractère general.character.plural=caractères general.create=Créer general.delete=Supprimer -general.moreInformation=More Information +general.moreInformation=Plus d'informations general.seeForMoreInformation=Consultez %S pour plus d'information. general.enable=Activer general.disable=Désactiver @@ -103,9 +103,9 @@ dataDir.selectDir=Sélectionner un répertoire de données Zotero dataDir.selectedDirNonEmpty.title=Répertoire non vide dataDir.selectedDirNonEmpty.text=Le répertoire que vous avez sélectionné n'est pas vide et ne semble pas être un répertoire de données Zotero.\n\nCréer néanmoins les fichiers Zotero dans ce répertoire ? dataDir.selectedDirEmpty.title=Répertoire vide -dataDir.selectedDirEmpty.text=Le répertoire que vous avez sélectionné est vide. Pour déplacer un répertoire de données Zotero existant, vous devez copier manuellement les fichiers depuis le répertoire de données existant vers son nouvel emplacement. Consultez http://zotero.org/support/zotero_data pour plus d'informations .⏎ ⏎ Utiliser le nouveau répertoire ? -dataDir.selectedDirEmpty.useNewDir=Use the new directory? -dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. +dataDir.selectedDirEmpty.text=Le répertoire que vous avez sélectionné est vide. Pour déplacer un répertoire de données Zotero existant, vous devez déplacer manuellement les fichiers depuis le répertoire de données existant vers son nouvel emplacement après avoir fermé %1$S. +dataDir.selectedDirEmpty.useNewDir=Utiliser le nouveau répertoire ? +dataDir.moveFilesToNewLocation=Assurez-vous d'avoir déplacé les fichiers de votre répertoire de données Zotero existant vers le nouvel emplacement avant de rouvrir %1$S. dataDir.incompatibleDbVersion.title=Version de la base de données incompatible dataDir.incompatibleDbVersion.text=Le répertoire de données actuellement sélectionné n'est pas compatible avec Zotero Standalone, qui ne peut partager une base de données qu'avec Zotero pour Firefox 2.1b3 et suivants.⏎ ⏎ Mettez à jour votre version de Zotero pour Firefox d'abord ou choisissez un répertoire de données différent à utiliser avec Zotero Standalone. dataDir.standaloneMigration.title=Bibliothèque Zotero existante détectée @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S pièce jointe : pane.item.attachments.count.plural=%S pièces jointes : pane.item.attachments.select=Sélectionner un fichier pane.item.attachments.PDF.installTools.title=Outils PDF non installés -pane.item.attachments.PDF.installTools.text=Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF depuis les Préférences de Zotero. +pane.item.attachments.PDF.installTools.text=Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF depuis le panneau Recherche des Préférences de Zotero. pane.item.attachments.filename=Nom du fichier pane.item.noteEditor.clickHere=Cliquez ici pane.item.tags.count.zero=%S marqueur : @@ -822,7 +822,7 @@ sync.storage.error.default=Une erreur de synchronisation de fichier s'est produi sync.storage.error.defaultRestart=Une erreur de synchronisation de fichier s'est produite. Veuillez redémarrer %S et/ou votre ordinateur et essayez de synchroniser à nouveau.⏎ ⏎ Si vous recevez ce message de manière répétée, soumettez un rapport d'erreur et postez son Report ID -numéro de rapport- dans un nouveau fil de discussion du forum Zotero. sync.storage.error.serverCouldNotBeReached=Le serveur %S n'a pu être atteint. sync.storage.error.permissionDeniedAtAddress=Vous n'avez pas le droit de créer un répertoire Zotero à l'adresse suivante : -sync.storage.error.checkFileSyncSettings=Veuillez vérifier vos paramètres de synchronisation de fichier ou contacter l'administrateur de votre serveur. +sync.storage.error.checkFileSyncSettings=Veuillez vérifier vos paramètres de synchronisation de fichier ou contacter l'administrateur de votre serveur WebDAV. sync.storage.error.verificationFailed=La vérification %S a échoué. Vérifiez vos paramètres de synchronisation de fichiers dans le panneau Synchronisation des Préférences de Zotero. sync.storage.error.fileNotCreated=Le fichier '%S' n'a pas pu être créé dans le répertoire 'storage' de Zotero. sync.storage.error.encryptedFilenames=Erreur lors de la création du fichier '%S'. ⏎ ⏎ Consultez http://www.zotero.org/support/kb/encrypted_filenames pour plus d'informations. diff --git a/chrome/locale/gl-ES/zotero/zotero.properties b/chrome/locale/gl-ES/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S adxunto: pane.item.attachments.count.plural=%S adxuntos: pane.item.attachments.select=Escolla un ficheiro pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=prema aquí pane.item.tags.count.zero=%S etiquetas: diff --git a/chrome/locale/he-IL/zotero/zotero.dtd b/chrome/locale/he-IL/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/he-IL/zotero/zotero.properties b/chrome/locale/he-IL/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S attachment: pane.item.attachments.count.plural=%S attachments: pane.item.attachments.select=בחר קובץ pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=לחץ כאן pane.item.tags.count.zero=%S tags: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/hr-HR/zotero/zotero.dtd b/chrome/locale/hr-HR/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/hr-HR/zotero/zotero.properties b/chrome/locale/hr-HR/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S attachment: pane.item.attachments.count.plural=%S attachments: pane.item.attachments.select=Select a File pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=click here pane.item.tags.count.zero=%S tags: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/hu-HU/zotero/zotero.dtd b/chrome/locale/hu-HU/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/hu-HU/zotero/zotero.properties b/chrome/locale/hu-HU/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S csatolmány: pane.item.attachments.count.plural=%S csatolmány: pane.item.attachments.select=Fájl kiválasztása pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=kattintson ide pane.item.tags.count.zero=%S címke: diff --git a/chrome/locale/is-IS/zotero/zotero.dtd b/chrome/locale/is-IS/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/is-IS/zotero/zotero.properties b/chrome/locale/is-IS/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S viðhengi: pane.item.attachments.count.plural=%S viðhengi: pane.item.attachments.select=Veldu skrá pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=click here pane.item.tags.count.zero=%S tög: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/it-IT/zotero/zotero.properties b/chrome/locale/it-IT/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S allegato pane.item.attachments.count.plural=%S allegati pane.item.attachments.select=Selezionare file pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=premere qui pane.item.tags.count.zero=%S tag: diff --git a/chrome/locale/ja-JP/zotero/zotero.properties b/chrome/locale/ja-JP/zotero/zotero.properties @@ -12,7 +12,7 @@ general.restartRequiredForChanges=変更を適用するために %S を再起動 general.restartNow=今すぐ再起動する general.restartLater=後で再起動する general.restartApp=%Sを再起動 -general.quitApp=Quit %S +general.quitApp=%S を終了する general.errorHasOccurred=エラーが発生しました。 general.unknownErrorOccurred=不明のエラーが発生しました。 general.invalidResponseServer=サーバーからの応答が不正です。 @@ -36,7 +36,7 @@ general.character.singular=文字 general.character.plural=文字 general.create=作成 general.delete=削除する -general.moreInformation=More Information +general.moreInformation=さらに詳しく general.seeForMoreInformation=さらに詳しくは、%S を調べてみてください。 general.enable=有効化 general.disable=無効化 @@ -104,8 +104,8 @@ dataDir.selectedDirNonEmpty.title=選択されたフォルダは空ではあり dataDir.selectedDirNonEmpty.text=選択されたフォルダは空ではなく、Zoteroのデータ保存フォルダではないようです。\n\nこのフォルダにZoteroのファイルを作成してよろしいですか? dataDir.selectedDirEmpty.title=空のディレクトリ dataDir.selectedDirEmpty.text=あなたの選んだディレクトリ名は空です。既存の Zotero データ・ディレクトリを移動するには、既存のデータ・ディレクトリ内のファイルを手動で新しい場所へコピーする必要があります。更に詳しくは、http://zotero.org/support/zotero_data をご覧ください。\n\n新しいディレクトリを使用しますか? -dataDir.selectedDirEmpty.useNewDir=Use the new directory? -dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. +dataDir.selectedDirEmpty.useNewDir=新しいディレクトリを使用しますか? +dataDir.moveFilesToNewLocation=%1$S を再起動する前に、必ず既存の Zotero データ保存フォルダから新しい場所へファイルを移動しておいてください。 dataDir.incompatibleDbVersion.title=データベースのヴァージョンが不完全です dataDir.incompatibleDbVersion.text=スタンドアローン版 Zotero は、Firefox 版 Zotero 2.1b3 以降としかデータベースを共用できないため、現在選択されているデータ・ディレクトリは、スタンドアローン版 Zotero との互換性がありません。\n\n最新版の Firefox 版 Zotero への更新をまず行うか、スタンドアローン版 Zotero と共用するために別のデータ・ディレクトリを選択してください。 dataDir.standaloneMigration.title=既存の Zotero ライブラリが見つかりました。 diff --git a/chrome/locale/km/zotero/about.dtd b/chrome/locale/km/zotero/about.dtd @@ -1,4 +1,4 @@ -<!ENTITY zotero.version "កំណែថ្មី"> +<!ENTITY zotero.version "កំណែ"> <!ENTITY zotero.createdby "បង្កើតដោយ:"> <!ENTITY zotero.director "នាយក:"> <!ENTITY zotero.directors "នាយក:"> @@ -10,4 +10,4 @@ <!ENTITY zotero.thanks "ថ្លែងអំណគុណពិសេស:"> <!ENTITY zotero.about.close "បិទ"> <!ENTITY zotero.moreCreditsAndAcknowledgements "ទំនួលស្គាល់ និង ថ្លែងអំណគុណ"> -<!ENTITY zotero.citationProcessing "Citation & Bibliography Processing"> +<!ENTITY zotero.citationProcessing "កំពុងដំណើរការរៀបចំអាគតដ្ឋាន និងគន្ថនិទេ្ទស"> diff --git a/chrome/locale/km/zotero/preferences.dtd b/chrome/locale/km/zotero/preferences.dtd @@ -3,7 +3,7 @@ <!ENTITY zotero.preferences.default "លំនាំដើម:"> <!ENTITY zotero.preferences.items "ឯកសារ"> <!ENTITY zotero.preferences.period "."> -<!ENTITY zotero.preferences.settings "Settings"> +<!ENTITY zotero.preferences.settings "ការកំណត់នានា"> <!ENTITY zotero.preferences.prefpane.general "ទូទៅ"> @@ -39,7 +39,7 @@ <!ENTITY zotero.preferences.groups.childNotes "កំណត់ត្រាកម្ជាប់"> <!ENTITY zotero.preferences.groups.childFiles "រូបភាពកម្ជាប់ និង ឯកសារនាំចូល"> <!ENTITY zotero.preferences.groups.childLinks "កម្ជាប់រណប"> -<!ENTITY zotero.preferences.groups.tags "tags"> +<!ENTITY zotero.preferences.groups.tags "ស្លាក"> <!ENTITY zotero.preferences.openurl.caption "បើកគេហទំព័រ"> @@ -60,14 +60,14 @@ <!ENTITY zotero.preferences.sync.fileSyncing.url "គេហទំព័រ:"> <!ENTITY zotero.preferences.sync.fileSyncing.myLibrary "ធ្វើសមកាលកម្មឯកសារកម្ជាប់ក្នុងស្វ័យបណ្ណាល័យ"> <!ENTITY zotero.preferences.sync.fileSyncing.groups "ធ្វើសមកាលកម្មមឯកសារភ្ជាប់នៅក្នុងបណ្ណាល័យក្រុមដោយប្រើបន្ទុកហ្ស៊ូតេរ៉ូ"> -<!ENTITY zotero.preferences.sync.fileSyncing.download "Download files"> +<!ENTITY zotero.preferences.sync.fileSyncing.download "ទាញយកឯកសារ"> <!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "at sync time"> -<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "as needed"> +<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "តាមការចាំបាច់"> <!ENTITY zotero.preferences.sync.fileSyncing.tos1 "តាមរយៈការប្រើបន្ទុកហ្ស៊ូតេរ៉ូ អ្នកត្រូវគោរពទៅតាម"> <!ENTITY zotero.preferences.sync.fileSyncing.tos2 "លក្ខខណ្ឌ និង ខសន្យា។"> <!ENTITY zotero.preferences.sync.reset.warning1 "The following operations are for use only in rare, specific situations and should not be used for general troubleshooting. In many cases, resetting will cause additional problems. See "> <!ENTITY zotero.preferences.sync.reset.warning2 "Sync Reset Options"> -<!ENTITY zotero.preferences.sync.reset.warning3 " for more information."> +<!ENTITY zotero.preferences.sync.reset.warning3 "សម្រាប់ព័ត៌មានបន្ថែម។"> <!ENTITY zotero.preferences.sync.reset.fullSync "ធ្វើសមកាលកម្មពេញលេញជាមួយម៉ាស៊ីនបម្រើហ្ស៊ូតេរ៉ូ"> <!ENTITY zotero.preferences.sync.reset.fullSync.desc "បញ្ចូលទិន្នន័យហ្ស៊ូតេរ៉ូមូលដ្ឋានជាមួយនិងម៉ាស៊ីនបម្រើសមកាលកម្មដោយមិនគិតអំពីប្រវត្តិសមកាលកម្ម។"> <!ENTITY zotero.preferences.sync.reset.restoreFromServer "ស្តារឡើងវិញពីម៉ាស៊ីនបម្រើហ្ស៊ូតេរ៉ូ"> @@ -76,7 +76,7 @@ <!ENTITY zotero.preferences.sync.reset.restoreToServer.desc "លុបចោលរាល់ទិន្នន័យម៉ាស៊ីនបម្រើទាំងអស់ និង សរសេរលុបពីលើទិន្នន័យ ហ្ស៊ូតេរ៉ូមូលដ្ឋាន"> <!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory "កំណត់រៀបចំប្រវត្តិឯកសារសមកាលកម្ម"> <!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory.desc "ពិនិត្យដោយហ្មត់ចត់ចំពោះឯកសារភ្ជាប់មូលដ្ឋានទាំងអស់ដែលបានផ្ទុកនៅក្នុងម៉ាស៊ីនបម្រើ"> -<!ENTITY zotero.preferences.sync.reset "Reset"> +<!ENTITY zotero.preferences.sync.reset "កំណត់ជាថ្មី"> <!ENTITY zotero.preferences.sync.reset.button "កំណត់រៀបចំជាថ្មី..."> @@ -162,7 +162,7 @@ <!ENTITY zotero.preferences.proxies.a_variable "%a - ខ្សែណាមួយ"> <!ENTITY zotero.preferences.prefpane.advanced "ជាន់ខ្ពស់"> -<!ENTITY zotero.preferences.advanced.filesAndFolders "Files and Folders"> +<!ENTITY zotero.preferences.advanced.filesAndFolders "ឯកសារនិងថតឯកសារ"> <!ENTITY zotero.preferences.prefpane.locate "ទីតាំងឯកសារ"> <!ENTITY zotero.preferences.locate.locateEngineManager "ម៉ាស៊ីនគ្រប់គ្រងស្វែងរកអត្ថបទ"> @@ -185,7 +185,7 @@ <!ENTITY zotero.preferences.attachmentBaseDir.caption "Linked Attachment Base Directory"> <!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero will use relative paths for linked file attachments within the base directory, allowing you to access files on different computers as long as the file structure within the base directory remains the same."> <!ENTITY zotero.preferences.attachmentBaseDir.basePath "Base directory:"> -<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Choose…"> +<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "ជ្រើសរើស..."> <!ENTITY zotero.preferences.attachmentBaseDir.resetBasePath "Revert to Absolute Paths…"> <!ENTITY zotero.preferences.dbMaintenance "ថែរក្សាទិន្នន័យ"> diff --git a/chrome/locale/km/zotero/standalone.dtd b/chrome/locale/km/zotero/standalone.dtd @@ -12,12 +12,12 @@ <!ENTITY fileMenu.label "តម្កល់ឯកសារ"> <!ENTITY fileMenu.accesskey "F"> -<!ENTITY saveCmd.label "Save…"> +<!ENTITY saveCmd.label "រក្សាទុក..."> <!ENTITY saveCmd.key "S"> <!ENTITY saveCmd.accesskey "A"> -<!ENTITY pageSetupCmd.label "Page Setup…"> +<!ENTITY pageSetupCmd.label "កំណត់ទម្រង់-ទ្រង់ទាយទំព័រ..."> <!ENTITY pageSetupCmd.accesskey "U"> -<!ENTITY printCmd.label "Print…"> +<!ENTITY printCmd.label "បោះពុម្ព..."> <!ENTITY printCmd.key "P"> <!ENTITY printCmd.accesskey "P"> <!ENTITY closeCmd.label "បិទ"> diff --git a/chrome/locale/km/zotero/zotero.properties b/chrome/locale/km/zotero/zotero.properties @@ -11,7 +11,7 @@ general.restartRequiredForChange=%S ត្រូវចាប់ផ្តើម general.restartRequiredForChanges=%S ត្រូវចាប់ផ្តើមជាថ្មី ដើម្បីឲការផ្លាស់ប្តូរមានប្រសិទ្ធភាព។ general.restartNow=ចាប់ផ្តើមជាថ្មីឥលូវ general.restartLater=ចាប់ផ្តើមជាថ្មីពេលក្រោយ -general.restartApp=Restart %S +general.restartApp=ចាប់ផ្តើមជាថ្មី %S general.quitApp=Quit %S general.errorHasOccurred=មានកំហុសកើតឡើង general.unknownErrorOccurred=កំហុសមិនដឹងមូលហេតុបានកើតឡើង។ @@ -36,17 +36,17 @@ general.character.singular=តួអក្សរ general.character.plural=តួអក្សរ general.create=បង្កើត general.delete=Delete -general.moreInformation=More Information +general.moreInformation=ព័ត៌មានបន្ថែម general.seeForMoreInformation=សូមមើល %S សម្រាប់ព័ត៌មានបន្ថែម។ general.enable=អាចដំណើរការ general.disable=មិនអាចដំណើរការ general.remove=លុបចោល -general.reset=Reset +general.reset=កំណត់ជាថ្មី general.hide=Hide -general.quit=Quit +general.quit=បិទ general.useDefault=Use Default general.openDocumentation=បើកឯកសារ -general.numMore=%S more… +general.numMore=%S បន្ថែម… general.openPreferences=Open Preferences general.operationInProgress=ហ្ស៊ូតេរ៉ូកំពុងដំណើរការឥលូវនេះ។ @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S ឯកសារកម្ជាប់: pane.item.attachments.count.plural=%S ឯកសារកម្ជាប់: pane.item.attachments.select=ជ្រើសរើសឯកសារ pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=សូមចុចត្រង់នេះ pane.item.tags.count.zero=%S ស្លាក: @@ -469,7 +469,7 @@ save.error.cannotAddFilesToCollection=អ្នកមិនអាចបន្ថ ingester.saveToZotero=ទាញឯកសាររក្សាទុកក្នុងហ្ស៊ូតេរ៉ូ ingester.saveToZoteroUsing=ទាញឯកសាររក្សាទុកក្នុងហ្ស៊ូតេរ៉ូតាមរយៈ "%S" ingester.scraping=កំពុងទាញឯកសាររក្សាទុក... -ingester.scrapingTo=Saving to +ingester.scrapingTo=កំពុងរក្សាទុកទៅកាន់ ingester.scrapeComplete=ឯកសារត្រូវបានទាញរក្សាទុក ingester.scrapeError=មិនអាចទាញឯកសាររក្សាទុកបាន ingester.scrapeErrorDescription=កំហុសបានកើតឡើង ខណៈពេលទាញឯកសារនេះមករក្សាទុក។ សូមមើល %S សម្រាប់ព័ត៌បន្ថែម។ @@ -584,7 +584,7 @@ fileInterface.exportError=មានកំហុសកើតឡើងខណៈព quickSearch.mode.titleCreatorYear=Title, Creator, Year quickSearch.mode.fieldsAndTags=All Fields & Tags -quickSearch.mode.everything=Everything +quickSearch.mode.everything=ទាំងអស់ advancedSearchMode=របៀបស្វែងរកលឿន សូមចុចសញ្ញាបញ្ចូលដើម្បីស្រាវជ្រាវ។ searchInProgress=សូមរងចាំ ខណៈពេលការស្រាវជាវកំពុងដំណើរការ។ @@ -649,8 +649,8 @@ citation.multipleSources=ពហុប្រភព... citation.singleSource=ឯកប្រភព... citation.showEditor=បង្ហាញកំណែតម្រូវ... citation.hideEditor=លាក់កំណែតម្រូវ... -citation.citations=Citations -citation.notes=Notes +citation.citations=អាគតដ្ឋាន +citation.notes=ចំណាំ report.title.default=របាយការណ៍ហ្ស៊ូតេរ៉ូ report.parentItem=តត្តកម្មៈ @@ -809,8 +809,8 @@ sync.storage.mbRemaining=%SMB remaining sync.storage.kbRemaining=%SKB កំពុងនៅសល់ sync.storage.filesRemaining=ឯកសារ %1$S/%2$S sync.storage.none=គ្មាន -sync.storage.downloads=Downloads: -sync.storage.uploads=Uploads: +sync.storage.downloads=ទាញយក: +sync.storage.uploads=ផ្ទុកឡើង: sync.storage.localFile=ឯកសារមូលដ្ឋាន sync.storage.remoteFile=ឯកសារចម្ងាយ sync.storage.savedFile=ឯកសារបានទាញរក្សាទុក @@ -894,12 +894,12 @@ rtfScan.saveTitle=ជ្រើសរើសទីតាំងដែលត្រ rtfScan.scannedFileSuffix=(បានវិភាគរួចហើយ) -file.accessError.theFile=The file '%S' -file.accessError.aFile=A file +file.accessError.theFile=ឯកសារ '%S' +file.accessError.aFile=ឯកសារ file.accessError.cannotBe=cannot be -file.accessError.created=created +file.accessError.created=បានបង្កើត file.accessError.updated=updated -file.accessError.deleted=deleted +file.accessError.deleted=បានលុបចោល file.accessError.message.windows=Check that the file is not currently in use and that it is not marked as read-only. To check all files in your Zotero data directory, right-click on the 'zotero' directory, click Properties, clear the Read-Only checkbox, and apply the change to all folders and files in the directory. file.accessError.message.other=Check that the file is not currently in use and that its permissions allow write access. file.accessError.restart=Restarting your computer or disabling security software may also help. diff --git a/chrome/locale/ko-KR/zotero/zotero.properties b/chrome/locale/ko-KR/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%s 첨부 pane.item.attachments.count.plural=%s 첨부 pane.item.attachments.select=파일 선택 pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=여기를 누르세요 pane.item.tags.count.zero=%S 태그: diff --git a/chrome/locale/mn-MN/zotero/zotero.dtd b/chrome/locale/mn-MN/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/mn-MN/zotero/zotero.properties b/chrome/locale/mn-MN/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S хавсралт: pane.item.attachments.count.plural=%S хавсралтууд: pane.item.attachments.select=Файлыг сонгох pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=Энд сонго pane.item.tags.count.zero=%S tags: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/nb-NO/zotero/zotero.dtd b/chrome/locale/nb-NO/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/nb-NO/zotero/zotero.properties b/chrome/locale/nb-NO/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S vedlegg: pane.item.attachments.count.plural=%S vedlegg: pane.item.attachments.select=Velg en fil pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=Klikk her pane.item.tags.count.zero=%S tagger: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/nl-NL/zotero/zotero.properties b/chrome/locale/nl-NL/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S bijlage: pane.item.attachments.count.plural=%S bijlages: pane.item.attachments.select=Selecteer een bestand pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=klik hier pane.item.tags.count.zero=%S labels: diff --git a/chrome/locale/nn-NO/zotero/zotero.properties b/chrome/locale/nn-NO/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S vedlegg: pane.item.attachments.count.plural=%S vedlegg: pane.item.attachments.select=Vel ei fil pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=Klikk her pane.item.tags.count.zero=%S taggar: diff --git a/chrome/locale/pl-PL/zotero/zotero.properties b/chrome/locale/pl-PL/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S załącznik pane.item.attachments.count.plural=%S załączniki(ów) pane.item.attachments.select=Wybierz plik pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=kliknij tutaj pane.item.tags.count.zero=Brak etykiet diff --git a/chrome/locale/pt-BR/zotero/zotero.properties b/chrome/locale/pt-BR/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S anexo: pane.item.attachments.count.plural=%S anexos: pane.item.attachments.select=Selecionar um arquivo pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=clique aqui pane.item.tags.count.zero=%S marcadores: diff --git a/chrome/locale/pt-PT/zotero/zotero.properties b/chrome/locale/pt-PT/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S anexo: pane.item.attachments.count.plural=%S anexos: pane.item.attachments.select=Seleccione um Arquivo pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=carregue aqui pane.item.tags.count.zero=%S etiquetas: diff --git a/chrome/locale/ro-RO/zotero/zotero.properties b/chrome/locale/ro-RO/zotero/zotero.properties @@ -12,14 +12,14 @@ general.restartRequiredForChanges=%S trebuie repornit pentru ca schimbările să general.restartNow=Repornește acum general.restartLater=Repornește mai târziu general.restartApp=Repornește %S -general.quitApp=Quit %S +general.quitApp=Termină %S general.errorHasOccurred=A intervenit o eroare. general.unknownErrorOccurred=A intervenit o eroare necunoscută. general.invalidResponseServer=Răspuns invalid de la server. general.tryAgainLater=Te rog să încerci din nou în câteva minute. general.serverError=Serverul a returnat o eroare. Te rog să încerci din nou. -general.restartFirefox=Repornește Firefox, te rog. -general.restartFirefoxAndTryAgain=Repornește Firefox, te rog, și apoi încearcă din nou. +general.restartFirefox=Repornește %S, te rog. +general.restartFirefoxAndTryAgain=Repornește %S, te rog, și apoi încearcă din nou. general.checkForUpdate=Caută după actualizări general.actionCannotBeUndone=Această acțiune nu poate fi anulată. general.install=Instalează @@ -36,7 +36,7 @@ general.character.singular=caracter general.character.plural=caractere general.create=Creează general.delete=Ștergere -general.moreInformation=More Information +general.moreInformation=Mai multe informații general.seeForMoreInformation=Vezi %S pentru mai multe informații. general.enable=Activare general.disable=Dezactivare @@ -104,8 +104,8 @@ dataDir.selectedDirNonEmpty.title=Dosarul nu e gol dataDir.selectedDirNonEmpty.text=Dosarul pe care l-ai selectat nu e gol și nu pare a fi un dosar de date Zotero.\n\nCreați totuși fișiere Zotero în acest dosar? dataDir.selectedDirEmpty.title=Director gol dataDir.selectedDirEmpty.text=Directorul pe care l-ai selectat este gol. Pentru a muta un director de date Zotero, trebuie să copiezi manual fișierele din directorul existent de date în noua locație. Vezi http://zotero.org/support/zotero_data pentru mai multe informații.\n\nFolosești noul director? -dataDir.selectedDirEmpty.useNewDir=Use the new directory? -dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. +dataDir.selectedDirEmpty.useNewDir=Folosești noul director? +dataDir.moveFilesToNewLocation=Asigură-te că muți fișierele din directorul tău existent de date Zotero în noua locație, înainte de a redeschide %1$S. dataDir.incompatibleDbVersion.title=Versiune incompatibilă a bazei de date dataDir.incompatibleDbVersion.text=Directorul de date selectat în mod current nu este compatibil cu Zotero Standalone, care plate partaja o bază de date numai cu Zotero pentru Firefox 2.1b3 sau mai recentă.\n\nFaceți mai întâi un upgrade la ultima versiune de Zotero pentru Firefox sau selectați un director de date diferit pentru a fi folosit cu Zotero Standalone. dataDir.standaloneMigration.title=Notificare de Migrare Zotero diff --git a/chrome/locale/ru-RU/zotero/zotero.properties b/chrome/locale/ru-RU/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S приложение: pane.item.attachments.count.plural=%S приложения(-й): pane.item.attachments.select=Выберите файл pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=нажмите здесь pane.item.tags.count.zero=%S тегов: diff --git a/chrome/locale/sk-SK/zotero/zotero.properties b/chrome/locale/sk-SK/zotero/zotero.properties @@ -12,7 +12,7 @@ general.restartRequiredForChanges=Aby sa zmeny prejavili, je potrebné reštarto general.restartNow=Reštartovať teraz general.restartLater=Reštartovať neskôr general.restartApp=Reštartovať %S -general.quitApp=Quit %S +general.quitApp=Zavrieť %S general.errorHasOccurred=Vyskytla sa chyba. general.unknownErrorOccurred=Vyskytla sa neznáma chyba. general.invalidResponseServer=Neplatná odpoveď zo servera. @@ -36,7 +36,7 @@ general.character.singular=znak general.character.plural=znaky general.create=Vytvoriť general.delete=Vymazať -general.moreInformation=More Information +general.moreInformation=Viac informácií general.seeForMoreInformation=Pre viac informácií pozri %S. general.enable=Povoliť general.disable=Zakázať @@ -104,8 +104,8 @@ dataDir.selectedDirNonEmpty.title=Priečinok nie je prázdny dataDir.selectedDirNonEmpty.text=Zvolený priečinok nie je prázdny a nevyzerá, že by obsahoval dáta zo Zotera.\n\nChcete napriek tomu, aby sa súbory vytvorili v tomto priečinku? dataDir.selectedDirEmpty.title=Adresár je prázdny dataDir.selectedDirEmpty.text=Vami vybraný adresár je prázdny. Na premiestnenie jestvujúceho adresára údajov Zotero budete musieť ručne nakopírovať súbory z jestvujúceho adresára údajov na nové miesto. Pozrite sa na http://zotero.org/support/zotero_data pre viac informácií. \n\nPoužiť nový adresár? -dataDir.selectedDirEmpty.useNewDir=Use the new directory? -dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. +dataDir.selectedDirEmpty.useNewDir=Použiť nový adresár? +dataDir.moveFilesToNewLocation=Uistite sa, že ste presunuli súbory zo svojho jestvujúceho adresára údajov Zotero na nové miesto pred znovuotvorením %1$S. dataDir.incompatibleDbVersion.title=Nekompatibilná verzia databázy dataDir.incompatibleDbVersion.text=Aktuálne vybraný adresár údajov nie je kompatibilný s Zotero Standalone, ktorý môže zdieľať databázu iba s Zotero pre Firefox 2.1b3 alebo novším.\n\nNajprv aktualizujte na najnovšiu verziu Zotera pre Firefox alebo zvoľte iný adresár údajov pre použitie s Zotero Standalone. dataDir.standaloneMigration.title=Našla sa jestvujúca knižnica Zotero @@ -890,7 +890,7 @@ rtfScan.openTitle=Vyberte súbor pre spracovanie rtfScan.scanning.label=Spracúvam RTF dokument... rtfScan.saving.label=Formátujem RTF dokument... rtfScan.rtf=Rich Text Format (.rtf) -rtfScan.saveTitle=Vyberte umiestnenie, kam sa má uložiť preformátovaný súbor +rtfScan.saveTitle=Vyberte miesto, kam sa má uložiť naformátovaný súbor rtfScan.scannedFileSuffix=(spracovaný) diff --git a/chrome/locale/sl-SI/zotero/zotero.properties b/chrome/locale/sl-SI/zotero/zotero.properties @@ -12,7 +12,7 @@ general.restartRequiredForChanges=Za uveljavitev sprememb je potrebno ponovno za general.restartNow=Ponovno zaženi zdaj general.restartLater=Ponovno zaženi kasneje general.restartApp=Ponovno zaženi %S -general.quitApp=Quit %S +general.quitApp=Izhod iz %S general.errorHasOccurred=Prišlo je do napake. general.unknownErrorOccurred=Prišlo je do neznane napake. general.invalidResponseServer=Neveljaven odgovor s strežnika. @@ -36,7 +36,7 @@ general.character.singular=znak general.character.plural=znakov general.create=Ustvari general.delete=Izbriši -general.moreInformation=More Information +general.moreInformation=Podrobnosti general.seeForMoreInformation=Oglejte si %S za več informacij. general.enable=Omogoči general.disable=Onemogoči @@ -104,7 +104,7 @@ dataDir.selectedDirNonEmpty.title=Mapa ni prazna dataDir.selectedDirNonEmpty.text=Mapa, ki ste jo izbrali, ni prazna in ni podatkovna mapa Zotero.\n\nŽelite kljub temu v tej mapi ustvariti datoteke Zotero? dataDir.selectedDirEmpty.title=Mapa je prazna dataDir.selectedDirEmpty.text=The directory you selected is empty. To move an existing Zotero data directory, you will need to manually move files from the existing data directory to the new location after %1$S has closed. -dataDir.selectedDirEmpty.useNewDir=Use the new directory? +dataDir.selectedDirEmpty.useNewDir=Želite uporabiti novo mapo? dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. dataDir.incompatibleDbVersion.title=Nezdružljiva različica zbirke podatkov dataDir.incompatibleDbVersion.text=The currently selected data directory is not compatible with Zotero Standalone, which can share a database only with Zotero for Firefox 2.1b3 or later.\n\nUpgrade to the latest version of Zotero for Firefox first or select a different data directory for use with Zotero Standalone. @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S priponka: pane.item.attachments.count.plural=%S priponk: pane.item.attachments.select=Izberite datoteko pane.item.attachments.PDF.installTools.title=Orodja PDF niso nameščena -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Ime datoteke pane.item.noteEditor.clickHere=kliknite sem pane.item.tags.count.zero=%S značk: @@ -517,7 +517,7 @@ zotero.preferences.sync.purgeStorage.confirmButton=Purge Files Now zotero.preferences.sync.purgeStorage.cancelButton=Do Not Purge zotero.preferences.sync.reset.userInfoMissing=You must enter a username and password in the %S tab before using the reset options. zotero.preferences.sync.reset.restoreFromServer=All data in this copy of Zotero will be erased and replaced with data belonging to user '%S' on the Zotero server. -zotero.preferences.sync.reset.replaceLocalData=Replace Local Data +zotero.preferences.sync.reset.replaceLocalData=Zamenjaj krajevne podatke zotero.preferences.sync.reset.restartToComplete=Za dokončanje postopke obnove morate ponovno zagnati Firefox. zotero.preferences.sync.reset.restoreToServer=All data belonging to user '%S' on the Zotero server will be erased and replaced with data from this copy of Zotero.\n\nDepending on the size of your library, there may be a delay before your data is available on the server. zotero.preferences.sync.reset.replaceServerData=Zamenjaj strežniške podatke @@ -582,9 +582,9 @@ fileInterface.noReferencesError=Vnosi, ki ste jih izbrali, ne vsebujejo sklicev. fileInterface.bibliographyGenerationError=Pri tvorbi bibliografije je prišlo do napake. Poskusite znova. fileInterface.exportError=Pri poskusu izvoza izbrane datoteke je prišlo do napake. -quickSearch.mode.titleCreatorYear=Title, Creator, Year -quickSearch.mode.fieldsAndTags=All Fields & Tags -quickSearch.mode.everything=Everything +quickSearch.mode.titleCreatorYear=Naslov, avtor, leto +quickSearch.mode.fieldsAndTags=Vsa polja in oznake +quickSearch.mode.everything=Vse advancedSearchMode=Napredni iskalni način - pritisnite vnašalko za iskanje. searchInProgress=Iskanje je v teku — prosimo, počakajte. @@ -733,7 +733,7 @@ styles.deleteStyle=Ste prepričani, da želite izbrisati slog »%1$S«? styles.deleteStyles=Ste prepričani, da želite izbrisati izbrane sloge? styles.abbreviations.title=Naloži okrajšave -styles.abbreviations.parseError=The abbreviations file "%1$S" is not valid JSON. +styles.abbreviations.parseError=Datoteka okrajšav "%1$S" ni veljaven JSON. styles.abbreviations.missingInfo=The abbreviations file "%1$S" does not specify a complete info block. sync.sync=Uskladi diff --git a/chrome/locale/sr-RS/zotero/zotero.dtd b/chrome/locale/sr-RS/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/sr-RS/zotero/zotero.properties b/chrome/locale/sr-RS/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S прилог: pane.item.attachments.count.plural=%S прилога: pane.item.attachments.select=Изабери датотеку pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=Кликни овде pane.item.tags.count.zero=%S ознака: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/sv-SE/zotero/zotero.properties b/chrome/locale/sv-SE/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S bifogat dokument: pane.item.attachments.count.plural=%S bifogade dokument: pane.item.attachments.select=Välj en fil pane.item.attachments.PDF.installTools.title=PDF-verktygen är inte installerade -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filnamn pane.item.noteEditor.clickHere=klicka här pane.item.tags.count.zero=%S etiketter: diff --git a/chrome/locale/th-TH/zotero/zotero.properties b/chrome/locale/th-TH/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=แฟ้มแนบ %S แฟ้ม: pane.item.attachments.count.plural=แฟ้มแนบ %S แฟ้ม: pane.item.attachments.select=เลือกแฟ้มข้อมูล pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=คลิกที่นี่ pane.item.tags.count.zero=%S แท็ก: diff --git a/chrome/locale/tr-TR/zotero/zotero.properties b/chrome/locale/tr-TR/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S ek: pane.item.attachments.count.plural=%S ek: pane.item.attachments.select=Bir Dosya Seç pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Dosya adı pane.item.noteEditor.clickHere=buraya tıkla pane.item.tags.count.zero=%S konu: diff --git a/chrome/locale/vi-VN/zotero/zotero.dtd b/chrome/locale/vi-VN/zotero/zotero.dtd @@ -278,4 +278,4 @@ <!ENTITY zotero.downloadManager.label "Save to Zotero"> <!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead."> -<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Zotero preferences."> +<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences."> diff --git a/chrome/locale/vi-VN/zotero/zotero.properties b/chrome/locale/vi-VN/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S phần đính kèm: pane.item.attachments.count.plural=%S phần đính kèm: pane.item.attachments.select=Chọn một Tập tin pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=ấn vào đây pane.item.tags.count.zero=%S thẻ: @@ -822,7 +822,7 @@ sync.storage.error.default=A file sync error occurred. Please try syncing again. sync.storage.error.defaultRestart=A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums. sync.storage.error.serverCouldNotBeReached=The server %S could not be reached. sync.storage.error.permissionDeniedAtAddress=You do not have permission to create a Zotero directory at the following address: -sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your server administrator. +sync.storage.error.checkFileSyncSettings=Please check your file sync settings or contact your WebDAV server administrator. sync.storage.error.verificationFailed=%S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences. sync.storage.error.fileNotCreated=The file '%S' could not be created in the Zotero 'storage' directory. sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information. diff --git a/chrome/locale/zh-CN/zotero/zotero.properties b/chrome/locale/zh-CN/zotero/zotero.properties @@ -91,10 +91,10 @@ attachmentBasePath.chooseNewPath.existingAttachments.singular=新根目录下已 attachmentBasePath.chooseNewPath.existingAttachments.plural=新的根目录下已存在 %S 个附件. attachmentBasePath.chooseNewPath.button=更改根目录设置 attachmentBasePath.clearBasePath.title=恢复使用绝对路径 -attachmentBasePath.clearBasePath.message=New linked file attachments will be saved using absolute paths. -attachmentBasePath.clearBasePath.existingAttachments.singular=One existing attachment within the old base directory will be converted to use an absolute path. -attachmentBasePath.clearBasePath.existingAttachments.plural=%S existing attachments within the old base directory will be converted to use absolute paths. -attachmentBasePath.clearBasePath.button=Clear Base Directory Setting +attachmentBasePath.clearBasePath.message=存储新的链接文件时将会使用绝对路径 +attachmentBasePath.clearBasePath.existingAttachments.singular=旧根目录下的一个已存在的附件将会被转化为使用绝对路径 +attachmentBasePath.clearBasePath.existingAttachments.plural=旧根目录下的%S个已存在的附件将会被转化为使用绝对路径 +attachmentBasePath.clearBasePath.button=清除根目录设置 dataDir.notFound=无法找到 Zotero 数据目录. dataDir.previousDir=上一目录: @@ -102,12 +102,12 @@ dataDir.useProfileDir=使用 Firefox 配置目录 dataDir.selectDir=选择 Zotero 数据目录 dataDir.selectedDirNonEmpty.title=目录非空 dataDir.selectedDirNonEmpty.text=您所选的目录非空, 且它并非 Zotero 数据目录.\n\n无论如何要在此目录里创建 Zotero 文件吗? -dataDir.selectedDirEmpty.title=Directory Empty +dataDir.selectedDirEmpty.title=目录为空 dataDir.selectedDirEmpty.text=The directory you selected is empty. To move an existing Zotero data directory, you will need to manually move files from the existing data directory to the new location after %1$S has closed. dataDir.selectedDirEmpty.useNewDir=Use the new directory? dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S. dataDir.incompatibleDbVersion.title=数据库版本不兼容 -dataDir.incompatibleDbVersion.text=The currently selected data directory is not compatible with Zotero Standalone, which can share a database only with Zotero for Firefox 2.1b3 or later.\n\nUpgrade to the latest version of Zotero for Firefox first or select a different data directory for use with Zotero Standalone. +dataDir.incompatibleDbVersion.text=当前选择的数据目录与Zotero独立版不兼容,只能使用Zotero for Firefox 2.1b3或之后的版本.\n请升级到最新版的Zotero for Firefox 或者使用另外的数据目录供Zotero独立版使用. dataDir.standaloneMigration.title=发现既有的 Zotero 库 dataDir.standaloneMigration.description=这是您第一次使用%1$S. 您希望%1$S从%2$S导入设置并使用您已有的数据目录吗? dataDir.standaloneMigration.multipleProfiles=%1$S将与最近使用的配置共享数据目录. @@ -153,7 +153,7 @@ pane.collections.newSavedSeach=新建检索 pane.collections.savedSearchName=输入检索结果的名称: pane.collections.rename=重命名分类: pane.collections.library=我的文献库 -pane.collections.groupLibraries=Group Libraries +pane.collections.groupLibraries=组资料库 pane.collections.trash=回收站 pane.collections.untitled=未命名 pane.collections.unfiled=未分类条目 @@ -179,14 +179,14 @@ pane.tagSelector.delete.message=您确定删除此标签吗?\n\n此标签将从 pane.tagSelector.numSelected.none=选中 0 个标签 pane.tagSelector.numSelected.singular=选中 %S 个标签 pane.tagSelector.numSelected.plural=选中 %S 个标签 -pane.tagSelector.maxColoredTags=Only %S tags in each library can have colors assigned. +pane.tagSelector.maxColoredTags=库中只允许为%S个标签标记颜色 -tagColorChooser.numberKeyInstructions=You can add this tag to selected items by pressing the $NUMBER key on the keyboard. -tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned. +tagColorChooser.numberKeyInstructions=你可以通过按下 $数字键 为选定的条目添加标签 +tagColorChooser.maxTags=库中只允许为%S个标签标记颜色 pane.items.loading=正在加载条目列表... -pane.items.attach.link.uri.title=Attach Link to URI -pane.items.attach.link.uri=Enter a URI: +pane.items.attach.link.uri.title=附加连接到URI +pane.items.attach.link.uri=输入URI: pane.items.trash.title=移动到回收站 pane.items.trash=您确定要将选中的条目移动到回收站吗? pane.items.trash.multiple=您确定要将选中的条目移动到回收站吗? @@ -227,11 +227,11 @@ pane.item.unselected.zero=当前预览下无可用条目 pane.item.unselected.singular=当前预览下有 %S 条目 pane.item.unselected.plural=当前预览下有 %S 条目 -pane.item.duplicates.selectToMerge=Select items to merge -pane.item.duplicates.mergeItems=Merge %S items -pane.item.duplicates.writeAccessRequired=Library write access is required to merge items. -pane.item.duplicates.onlyTopLevel=Only top-level full items can be merged. -pane.item.duplicates.onlySameItemType=Merged items must all be of the same item type. +pane.item.duplicates.selectToMerge=选择要合并的项 +pane.item.duplicates.mergeItems=合并%S项 +pane.item.duplicates.writeAccessRequired=需要库写入权限来进行合并操作 +pane.item.duplicates.onlyTopLevel=只有顶级条目才能被合并 +pane.item.duplicates.onlySameItemType=合并的项必须是相同类型 pane.item.changeType.title=更改条目类型 pane.item.changeType.text=您确定要更改条目类型吗?\n\n如下字段将丢失: @@ -257,9 +257,9 @@ pane.item.attachments.count.zero=%S 个附件: pane.item.attachments.count.singular=%S 个附件: pane.item.attachments.count.plural=%S 个附件: pane.item.attachments.select=选择文件 -pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. -pane.item.attachments.filename=Filename +pane.item.attachments.PDF.installTools.title=未安装PDF工具 +pane.item.attachments.PDF.installTools.text=要使用这项特性,必须先安装在首选项处PDF工具 +pane.item.attachments.filename=文件名 pane.item.noteEditor.clickHere=点击此处 pane.item.tags.count.zero=%S 个标签: pane.item.tags.count.singular=%S 个标签: @@ -469,7 +469,7 @@ save.error.cannotAddFilesToCollection=您无法在当前选中的分类中添加 ingester.saveToZotero=保存到Zotero ingester.saveToZoteroUsing=使用"%S"保存到 Zotero ingester.scraping=保存条目... -ingester.scrapingTo=Saving to +ingester.scrapingTo=保存到 ingester.scrapeComplete=条目已存. ingester.scrapeError=无法保存条目 ingester.scrapeErrorDescription=保存此条目时出错. 查看%S以获取更多信息. @@ -482,7 +482,7 @@ ingester.importReferRISDialog.checkMsg=总是允许该网址 ingester.importFile.title=导入文件 ingester.importFile.text=你要导入"%S"文件吗?\n\n条目将加入新的群组中. -ingester.importFile.intoNewCollection=Import into new collection +ingester.importFile.intoNewCollection=导入到新收藏 ingester.lookup.performing=执行检索... ingester.lookup.error=检索本条目时发生错误. @@ -511,11 +511,11 @@ zotero.preferences.openurl.resolversFound.zero=发现 %S 个解析器 zotero.preferences.openurl.resolversFound.singular=发现 %S 个解析器 zotero.preferences.openurl.resolversFound.plural=发现 %S 个解析器 -zotero.preferences.sync.purgeStorage.title=Purge Attachment Files on Zotero Servers? -zotero.preferences.sync.purgeStorage.desc=If you plan to use WebDAV for file syncing and you previously synced attachment files in My Library to the Zotero servers, you can purge those files from the Zotero servers to give you more storage space for groups.\n\nYou can purge files at any time from your account settings on zotero.org. -zotero.preferences.sync.purgeStorage.confirmButton=Purge Files Now -zotero.preferences.sync.purgeStorage.cancelButton=Do Not Purge -zotero.preferences.sync.reset.userInfoMissing=You must enter a username and password in the %S tab before using the reset options. +zotero.preferences.sync.purgeStorage.title=清除Zotero服务器上的附件? +zotero.preferences.sync.purgeStorage.desc=如果你计划使用WebDAV进行同步,而且之前使用了Zotero服务器进行了附件同步, 你可以清除服务器上的数据来为组群提供更多的存储空间. 你可以随时在zotero.org的账户设置处进行这项操作. +zotero.preferences.sync.purgeStorage.confirmButton=现在清除文件 +zotero.preferences.sync.purgeStorage.cancelButton=不要清除 +zotero.preferences.sync.reset.userInfoMissing=你必须在%S 标签输入用户名和密码后才能使用重置选项 zotero.preferences.sync.reset.restoreFromServer=All data in this copy of Zotero will be erased and replaced with data belonging to user '%S' on the Zotero server. zotero.preferences.sync.reset.replaceLocalData=Replace Local Data zotero.preferences.sync.reset.restartToComplete=Firefox must be restarted to complete the restore process. diff --git a/chrome/locale/zh-TW/zotero/zotero.properties b/chrome/locale/zh-TW/zotero/zotero.properties @@ -258,7 +258,7 @@ pane.item.attachments.count.singular=%S 個附件: pane.item.attachments.count.plural=%S 個附件: pane.item.attachments.select=選取檔案 pane.item.attachments.PDF.installTools.title=PDF Tools Not Installed -pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Zotero preferences. +pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences. pane.item.attachments.filename=Filename pane.item.noteEditor.clickHere=點選此處 pane.item.tags.count.zero=%S 個標籤: diff --git a/resource/concurrent-caller.js b/resource/concurrent-caller.js @@ -0,0 +1,155 @@ +/* + ***** BEGIN LICENSE BLOCK ***** + + Copyright © 2013 Center for History and New Media + George Mason University, Fairfax, Virginia, USA + http://zotero.org + + This file is part of Zotero. + + Zotero is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Zotero is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with Zotero. If not, see <http://www.gnu.org/licenses/>. + + ***** END LICENSE BLOCK ***** +*/ + +EXPORTED_SYMBOLS = ["ConcurrentCaller"]; +Components.utils.import("resource://zotero/q.js"); + +/** + * Call a fixed number of functions at once, queueing the rest until slots + * open and returning a promise for the final completion. The functions do + * not need to return promises, but they should if they have asynchronous + * work to perform.. + * + * Example: + * + * var caller = new ConcurrentCaller(2); + * caller.stopOnError = true; + * caller.fcall([foo, bar, baz, qux).done(); + * + * In this example, foo and bar would run immediately, and baz and qux would + * be queued for later. When foo or bar finished, baz would be run, followed + * by qux when another slot opened. + * + * @param {Integer} numConcurrent The number of concurrent functions to run. + */ +ConcurrentCaller = function (numConcurrent) { + if (typeof numConcurrent == 'undefined') { + throw new Error("numConcurrent not provided"); + } + + this.stopOnError = false; + + this.numConcurrent = numConcurrent; + this.numRunning = 0; + this.queue = []; + this.logger = null; + this.errorLogger = null; +}; + + +ConcurrentCaller.prototype.setLogger = function (func) { + this.logger = func; +} + + +ConcurrentCaller.prototype.setErrorLogger = function (func) { + this.errorLogger = func; +} + + +/** + * @param {Function[]|Function} func One or more functions to run + */ +ConcurrentCaller.prototype.fcall = function (func) { + if (Array.isArray(func)) { + var promises = []; + for (var i in func) { + //this._log("Running fcall on function"); + promises.push(this.fcall(func[i])); + } + return this.stopOnError ? Q.all(promises) : Q.allResolved(promises); + } + + // If we're at the maximum number of concurrent functions, + // queue this function for later + if (this.numRunning == this.numConcurrent) { + this._log("Already at " + this.numConcurrent + " -- queueing for later"); + var deferred = Q.defer(); + this.queue.push({ + func: Q.fbind(func), + deferred: deferred + }); + return deferred.promise; + } + + this._log("Running function (" + this.numRunning + " current < " + this.numConcurrent + " max)"); + + // Otherwise run it now + this.numRunning++; + return this._onFunctionDone(Q.fcall(func)); +} + + +ConcurrentCaller.prototype._onFunctionDone = function (promise) { + var self = this; + return Q.when( + promise, + function (promise) { + self.numRunning--; + + self._log("Done with function (" + + self.numRunning + "/" + self.numConcurrent + " running, " + + self.queue.length + " queued)"); + + // If there's a function to call and we're under the concurrent limit, + // run it now + let f = self.queue.shift(); + if (f && self.numRunning < self.numConcurrent) { + Q.delay(1) + .then(function () { + self.numRunning++; + var p = self._onFunctionDone(f.func()); + f.deferred.resolve(p); + }); + } + + return promise; + }, + function (e) { + if (self.errorLogger) { + self.errorLogger(e); + } + + self.numRunning--; + + self._log("Done with function (" + self.numRunning + "/" + self.numConcurrent + ", " + + self.queue.length + " in queue)"); + + if (self.stopOnError && self.queue.length) { + self._log("Stopping on error: " + e); + self.queue = []; + } + + throw e; + } + ); +} + + +ConcurrentCaller.prototype._log = function (msg) { + if (this.logger) { + this.logger(msg); + } +} diff --git a/resource/schema/repotime.txt b/resource/schema/repotime.txt @@ -1 +1 @@ -2013-03-22 05:55:00 +2013-03-26 00:00:00