From 4077428b4ebd0b910e8e9cfa632d26f5aff1d53a Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 1 Dec 2019 01:42:53 -0700 Subject: [PATCH] Update locales from Transifex --- chrome/content/zotero/components/foo.jsx | 18 + .../zotero/components/watch_components | 1 + chrome/content/zotero/test.xul | 17 + chrome/content/zotero/test2.html | 22 + .../content/zotero/xpcom/data/dataObject.js2 | 1296 +++++++++++++++++ chrome/content/zotero/xpcom/undo.js | 98 ++ chrome/locale/af-ZA/zotero/zotero.properties | 8 +- chrome/locale/cs-CZ/zotero/zotero.properties | 2 +- chrome/locale/de/zotero/zotero.properties | 26 +- chrome/locale/el-GR/zotero/zotero.dtd | 16 +- chrome/locale/el-GR/zotero/zotero.properties | 8 +- chrome/locale/eu-ES/zotero/zotero.properties | 8 +- chrome/locale/fa/zotero/zotero.properties | 4 +- chrome/locale/fi-FI/zotero/zotero.properties | 2 +- chrome/locale/gl-ES/zotero/zotero.properties | 4 +- chrome/locale/he-IL/zotero/zotero.properties | 8 +- chrome/locale/hr-HR/zotero/zotero.properties | 8 +- chrome/locale/hu-HU/zotero/zotero.properties | 8 +- chrome/locale/is-IS/zotero/zotero.properties | 2 +- chrome/locale/it-IT/zotero/zotero.properties | 4 +- chrome/locale/ko-KR/zotero/zotero.properties | 4 +- chrome/locale/mn-MN/zotero/zotero.properties | 8 +- chrome/locale/nb-NO/zotero/zotero.properties | 10 +- chrome/locale/nn-NO/zotero/zotero.properties | 8 +- chrome/locale/sr-RS/zotero/zotero.properties | 6 +- chrome/locale/vi-VN/zotero/zotero.properties | 8 +- .../skin/default/zotero/extensionsOverlay.css | 3 + 27 files changed, 1531 insertions(+), 76 deletions(-) create mode 100644 chrome/content/zotero/components/foo.jsx create mode 100755 chrome/content/zotero/components/watch_components create mode 100644 chrome/content/zotero/test.xul create mode 100644 chrome/content/zotero/test2.html create mode 100644 chrome/content/zotero/xpcom/data/dataObject.js2 create mode 100644 chrome/content/zotero/xpcom/undo.js create mode 100644 chrome/skin/default/zotero/extensionsOverlay.css diff --git a/chrome/content/zotero/components/foo.jsx b/chrome/content/zotero/components/foo.jsx new file mode 100644 index 0000000000..3fd41a40dc --- /dev/null +++ b/chrome/content/zotero/components/foo.jsx @@ -0,0 +1,18 @@ +import React, { useState } from 'react'; + +function Foo() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + Zotero.debug("RUNNING FOO"); + + return ( +
+

You clicked {count} times

+ +
+ ); +} + +module.exports = Foo; \ No newline at end of file diff --git a/chrome/content/zotero/components/watch_components b/chrome/content/zotero/components/watch_components new file mode 100755 index 0000000000..fb53c1467c --- /dev/null +++ b/chrome/content/zotero/components/watch_components @@ -0,0 +1 @@ +fswatch -o . | xargs -n1 -I{} sh -c 'rsync -av --delete ./ ~/react-app/tmp/; find ~/react-app/tmp -name "*.jsx" -exec perl -pi -e "print \"import Zotero from \\\"zotero\\\"\; \/\/ eslint-disable-line no-unused-vars\n\" if $. == 1" \{\} \; ; rsync -av --delete ~/react-app/tmp/ ~/react-app/src/components/;' _ diff --git a/chrome/content/zotero/test.xul b/chrome/content/zotero/test.xul new file mode 100644 index 0000000000..8de021adc8 --- /dev/null +++ b/chrome/content/zotero/test.xul @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/chrome/content/zotero/xpcom/data/dataObject.js2 b/chrome/content/zotero/xpcom/data/dataObject.js2 new file mode 100644 index 0000000000..f8e08143a4 --- /dev/null +++ b/chrome/content/zotero/xpcom/data/dataObject.js2 @@ -0,0 +1,1296 @@ +/* + ***** 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 . + + ***** END LICENSE BLOCK ***** +*/ + +/** + * @property {String} (readOnly) objectType + * @property {String} (readOnly) libraryKey + * @property {String|false|undefined} parentKey - False if no parent, or undefined if not + * applicable (e.g. search objects) + * @property {Integer|false|undefined} parentID - False if no parent, or undefined if not + * applicable (e.g. search objects) + */ + +Zotero.DataObject = function () { + let objectType = this._objectType; + this._ObjectType = objectType[0].toUpperCase() + objectType.substr(1); + this._objectTypePlural = Zotero.DataObjectUtilities.getObjectTypePlural(objectType); + this._ObjectTypePlural = this._objectTypePlural[0].toUpperCase() + this._objectTypePlural.substr(1); + this._ObjectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(objectType); + + this._id = null; + this._libraryID = null; + this._key = null; + this._dateAdded = null; + this._dateModified = null; + this._version = null; + this._synced = null; + this._identified = false; + this._parentID = null; + this._parentKey = null; + + this._relations = []; + + // Set in dataObjects.js + this._inCache = false; + + this._loaded = {}; + this._skipDataTypeLoad = {}; + this._markAllDataTypeLoadStates(false); + + this._clearChanged(); +}; + +Zotero.DataObject.prototype._objectType = 'dataObject'; +Zotero.DataObject.prototype._dataTypes = ['primaryData']; + +Zotero.defineProperty(Zotero.DataObject.prototype, 'objectType', { + get: function() { return this._objectType; } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'id', { + get: function() { return this._id; } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'libraryID', { + get: function() { return this._libraryID; } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'library', { + get: function () { + return Zotero.Libraries.get(this._libraryID); + } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'key', { + get: function() { return this._key; } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'libraryKey', { + get: function() { return this._libraryID + "/" + this._key; } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'parentKey', { + get: function () { return this._getParentKey(); }, + set: function(v) { return this._setParentKey(v); } +}); +Zotero.defineProperty(Zotero.DataObject.prototype, 'parentID', { + get: function() { return this._getParentID(); }, + set: function(v) { return this._setParentID(v); } +}); + +Zotero.defineProperty(Zotero.DataObject.prototype, '_canHaveParent', { + value: true +}); + +Zotero.defineProperty(Zotero.DataObject.prototype, 'ObjectsClass', { + get: function() { return this._ObjectsClass; } +}); + + +Zotero.DataObject.prototype._get = function (field) { + if (field != 'id') this._disabledCheck(); + + if (this['_' + field] !== null) { + return this['_' + field]; + } + if (field != 'libraryID' && field != 'key' && field != 'id') { + this._requireData('primaryData'); + } + return null; +} + + +Zotero.DataObject.prototype._set = function (field, value) { + this._disabledCheck(); + + if (field == 'id' || field == 'libraryID' || field == 'key') { + return this._setIdentifier(field, value); + } + + this._requireData('primaryData'); + + switch (field) { + case 'name': + value = value.trim().normalize(); + break; + + case 'version': + value = parseInt(value); + break; + + case 'synced': + value = !!value; + break; + } + + if (this['_' + field] != value || field == 'synced') { + this._markFieldChange(field, this['_' + field], value); + } +} + + +Zotero.DataObject.prototype._setIdentifier = function (field, value) { + switch (field) { + case 'id': + value = Zotero.DataObjectUtilities.checkDataID(value); + if (this._id) { + if (value === this._id) { + return; + } + throw new Error("ID cannot be changed"); + } + if (this._key) { + throw new Error("Cannot set id if key is already set"); + } + break; + + case 'libraryID': + value = Zotero.DataObjectUtilities.checkLibraryID(value); + break; + + case 'key': + if (this._libraryID === null) { + throw new Error("libraryID must be set before key"); + } + value = Zotero.DataObjectUtilities.checkKey(value); + if (this._key) { + if (value === this._key) { + return; + } + throw new Error("Key cannot be changed"); + } + if (this._id) { + throw new Error("Cannot set key if id is already set"); + } + } + + if (value === this['_' + field]) { + return; + } + + // If primary data is loaded, the only allowed identifier change is libraryID, and then only + // for unidentified objects, and then only either if a libraryID isn't yet set (because + // primary data gets marked as loaded when fields are set for new items, but some methods + // (setCollections(), save()) automatically set the user library ID after that if none is + // specified), or for searches (for the sake of the library switcher in the advanced search + // window, though that could probably be rewritten) + if (this._loaded.primaryData) { + if (!(!this._identified && field == 'libraryID' + && (!this._libraryID || this._objectType == 'search'))) { + throw new Error("Cannot change " + field + " after object is already loaded"); + } + } + + if (field == 'id' || field == 'key') { + this._identified = true; + } + + this['_' + field] = value; +} + + +/** + * Get the id of the parent object + * + * @return {Integer|false|undefined} The id of the parent object, false if none, or undefined + * on object types to which it doesn't apply (e.g., searches) + */ +Zotero.DataObject.prototype._getParentID = function () { + if (this._parentID !== null) { + return this._parentID; + } + if (!this._parentKey) { + if (this._objectType == 'search') { + return undefined; + } + return false; + } + return this._parentID = this.ObjectsClass.getIDFromLibraryAndKey(this._libraryID, this._parentKey); +} + + +/** + * Set the id of the parent object + * + * @param {Number|false} [id=false] + * @return {Boolean} True if changed, false if stayed the same + */ +Zotero.DataObject.prototype._setParentID = function (id) { + return this._setParentKey( + id + ? this.ObjectsClass.getLibraryAndKeyFromID(Zotero.DataObjectUtilities.checkDataID(id)).key + : false + ); +} + + +Zotero.DataObject.prototype._getParentKey = function () { + if (!this._canHaveParent) { + return undefined; + } + return this._parentKey ? this._parentKey : false +} + +/** + * Set the key of the parent object + * + * @param {String|false} [key=false] + * @return {Boolean} True if changed, false if stayed the same + */ +Zotero.DataObject.prototype._setParentKey = function(key) { + if (!this._canHaveParent) { + throw new Error("Cannot set parent key for " + this._objectType); + } + + key = Zotero.DataObjectUtilities.checkKey(key) || false; + + if (key === this._parentKey || (!this._parentKey && !key)) { + return false; + } + this._markFieldChange('parentKey', this._parentKey, key); + //this._parentKey = key; + //this._parentID = null; + return true; +} + +// +// Relations +// +/** + * Returns all relations of the object + * + * @return {Object} - Object with predicates as keys and arrays of values + */ +Zotero.DataObject.prototype.getRelations = function () { + this._requireData('relations'); + + var relations = {}; + for (let i=0; i rel[0] != predicate || rel[1] != object); + + if (oldSize != newRelations.length) { + Zotero.debug("Relation " + predicate + " - " + object + " did not exist for " + + this._objectType + " " + this.libraryKey); + return; + } + + Zotero.debug("Removing relation " + predicate + " - " + object + " from " + + this._objectType + " " + this.libraryKey); + this._markFieldChange('relations', this._relations, newRelations); + //this._relations.splice(i, 1); +} + + +/** + * Updates the object's relations + * + * @param {Object} newRelations Object with predicates as keys and URI[] as values + * @return {Boolean} True if changed, false if stayed the same + */ +Zotero.DataObject.prototype.setRelations = function (newRelations) { + this._requireData('relations'); + + if (typeof newRelations != 'object') { + throw new Error(`Relations must be an object (${typeof newRelations} given)`); + } + + var oldRelations = this._relations; + + // Limit predicates to letters and colons for now + for (let p in newRelations) { + if (!/^[a-z]+:[a-z]+$/i.test(p)) { + throw new Error(`Invalid relation predicate '${p}'`); + } + } + + // Relations are stored internally as a flat array with individual predicate-object pairs, + // so convert the incoming relations to that + var newRelationsFlat = this.ObjectsClass.flattenRelations(newRelations); + + var changed = false; + if (oldRelations.length != newRelationsFlat.length) { + changed = true; + } + else { + let sortFunc = function (a, b) { + if (a[0] < b[0]) return -1; + if (a[0] > b[0]) return 1; + if (a[1] < b[1]) return -1; + if (a[1] > b[1]) return 1; + return 0; + }; + oldRelations.sort(sortFunc); + newRelationsFlat.sort(sortFunc); + + for (let i=0; i} Linked object, or false if not found + */ +Zotero.DataObject.prototype._getLinkedObject = Zotero.Promise.coroutine(function* (libraryID, bidirectional) { + if (!libraryID) { + throw new Error("libraryID not provided"); + } + + if (libraryID == this._libraryID) { + throw new Error(this._ObjectType + " is already in library " + libraryID); + } + + var predicate = Zotero.Relations.linkedObjectPredicate; + var libraryObjectPrefix = Zotero.URI.getLibraryURI(libraryID) + + "/" + this._objectTypePlural + "/"; + + // Try the relations with this as a subject + var uris = this.getRelationsByPredicate(predicate); + for (let i = 0; i < uris.length; i++) { + let uri = uris[i]; + if (uri.startsWith(libraryObjectPrefix)) { + let obj = yield Zotero.URI['getURI' + this._ObjectType](uri); + if (!obj) { + Zotero.debug("Referenced linked " + this._objectType + " '" + uri + "' not found " + + "in Zotero." + this._ObjectType + "::getLinked" + this._ObjectType + "()", 2); + continue; + } + return obj; + } + } + + // Then try relations with this as an object + if (bidirectional) { + var thisURI = Zotero.URI['get' + this._ObjectType + 'URI'](this); + var objects = Zotero.Relations.getByPredicateAndObject( + this._objectType, predicate, thisURI + ); + for (let i = 0; i < objects.length; i++) { + let obj = objects[i]; + if (obj.objectType != this._objectType) { + Zotero.logError("Found linked object of different type " + + "(expected " + this._objectType + ", found " + obj.objectType + ")"); + continue; + } + if (obj.libraryID == libraryID) { + return obj; + } + } + } + + return false; +}); + + +/** + * Add a linked-item relation to a pair of objects + * + * A separate save() is not required. + * + * @param {Zotero.DataObject} object + * @param {Promise} + */ +Zotero.DataObject.prototype._addLinkedObject = Zotero.Promise.coroutine(function* (object) { + if (object.libraryID == this._libraryID) { + throw new Error("Can't add linked " + this._objectType + " in same library"); + } + + var predicate = Zotero.Relations.linkedObjectPredicate; + var thisURI = Zotero.URI['get' + this._ObjectType + 'URI'](this); + var objectURI = Zotero.URI['get' + this._ObjectType + 'URI'](object); + + var exists = this.hasRelation(predicate, objectURI); + if (exists) { + Zotero.debug(this._ObjectTypePlural + " " + this.libraryKey + + " and " + object.libraryKey + " are already linked"); + return false; + } + + // If one of the items is a personal library, store relation with that. Otherwise, use + // current item's library (which in calling code is the new, copied item, since that's what + // the user definitely has access to). + var userLibraryID = Zotero.Libraries.userLibraryID; + if (this.libraryID == userLibraryID || object.libraryID != userLibraryID) { + this.addRelation(predicate, objectURI); + yield this.save({ + skipDateModifiedUpdate: true, + skipSelect: true + }); + } + else { + object.addRelation(predicate, thisURI); + yield object.save({ + skipDateModifiedUpdate: true, + skipSelect: true + }); + } + + return true; +}); + + +// +// Bulk data loading functions +// +// These are called by Zotero.DataObjects.prototype.loadDataType(). +// +Zotero.DataObject.prototype.loadPrimaryData = Zotero.Promise.coroutine(function* (reload, failOnMissing) { + if (this._loaded.primaryData && !reload) return; + + var id = this._id; + var key = this._key; + var libraryID = this._libraryID; + + if (!id && !key) { + throw new Error('ID or key not set in Zotero.' + this._ObjectType + '.loadPrimaryData()'); + } + + var columns = [], join = [], where = []; + var primaryFields = this.ObjectsClass.primaryFields; + var idField = this.ObjectsClass.idColumn; + for (let i=0; i this._loaded[type]); + } + + if (dataTypes && dataTypes.length) { + for (let i=0; i} Promise for itemID of new item, + * TRUE on item update, or FALSE if item was unchanged + */ +Zotero.DataObject.prototype.save = Zotero.Promise.coroutine(function* (options = {}) { + var env = { + options: Object.assign({}, options), + transactionOptions: {} + }; + + if (!env.options.tx && !Zotero.DB.inTransaction()) { + Zotero.logError("save() called on Zotero." + this._ObjectType + " without a wrapping " + + "transaction -- use saveTx() instead"); + Zotero.debug((new Error).stack, 2); + env.options.tx = true; + } + + if (env.options.skipAll) { + [ + 'skipDateModifiedUpdate', + 'skipClientDateModifiedUpdate', + 'skipSyncedUpdate', + 'skipEditCheck', + 'skipNotifier', + 'skipSelect' + ].forEach(x => env.options[x] = true); + } + + var proceed = yield this._initSave(env); + if (!proceed) return false; + + if (env.isNew) { + Zotero.debug('Saving data for new ' + this._objectType + ' to database', 4); + } + else { + Zotero.debug('Updating database with new ' + this._objectType + ' data', 4); + } + + try { + if (Zotero.DataObject.prototype._finalizeSave == this._finalizeSave) { + throw new Error("_finalizeSave not implemented for Zotero." + this._ObjectType); + } + + env.notifierData = {}; + // Pass along any 'notifierData' values + if (env.options.notifierData) { + Object.assign(env.notifierData, env.options.notifierData); + } + if (env.options.skipSelect) { + env.notifierData.skipSelect = true; + } + if (!env.isNew) { + env.changed = {}; + this._previousData.forEach((value, key) => { + env.changed[key, value]; + }); + } + + // Create transaction + let result + if (env.options.tx) { + result = yield Zotero.DB.executeTransaction(function* () { + Zotero.DataObject.prototype._saveData.call(this, env); + yield this._saveData(env); + yield Zotero.DataObject.prototype._finalizeSave.call(this, env); + return this._finalizeSave(env); + }.bind(this), env.transactionOptions); + } + // Use existing transaction + else { + Zotero.DB.requireTransaction(); + Zotero.DataObject.prototype._saveData.call(this, env); + yield this._saveData(env); + yield Zotero.DataObject.prototype._finalizeSave.call(this, env); + result = this._finalizeSave(env); + } + this._postSave(env); + return result; + } + catch(e) { + return this._recoverFromSaveError(env, e) + .catch(function(e2) { + Zotero.debug(e2, 1); + }) + .then(function() { + if (env.options.errorHandler) { + env.options.errorHandler(e); + } + else { + Zotero.logError(e); + } + throw e; + }) + } +}); + + +Zotero.DataObject.prototype.saveTx = function (options = {}) { + options = Object.assign({}, options); + options.tx = true; + return this.save(options); +} + + +Zotero.DataObject.prototype._initSave = Zotero.Promise.coroutine(function* (env) { + // Default to user library if not specified + if (this.libraryID === null) { + this._libraryID = Zotero.Libraries.userLibraryID; + } + + env.isNew = !this.id; + + if (!env.options.skipEditCheck) { + this.editCheck(); + } + + let targetLib = Zotero.Libraries.get(this.libraryID); + if (!targetLib.isChildObjectAllowed(this._objectType)) { + throw new Error("Cannot add " + this._objectType + " to a " + targetLib.libraryType + " library"); + } + + if (!this.hasChanged()) { + Zotero.debug(this._ObjectType + ' ' + this.id + ' has not changed', 4); + return false; + } + + // Undo registerObject() on failure + if (env.isNew) { + var func = function () { + this.ObjectsClass.unload(this._id); + }.bind(this); + if (env.options.tx) { + env.transactionOptions.onRollback = func; + } + else { + Zotero.DB.addCurrentCallback("rollback", func); + } + } + + env.relationsToRegister = []; + env.relationsToUnregister = []; + + return true; +}); + +Zotero.DataObject.prototype._saveData = function (env) { + var libraryID = env.libraryID = this.libraryID || Zotero.Libraries.userLibraryID; + var key = env.key = this._key = this.key ? this.key : this._generateKey(); + + env.sqlColumns = []; + env.sqlValues = []; + + if (env.isNew) { + env.sqlColumns.push( + 'libraryID', + 'key' + ); + env.sqlValues.push( + libraryID, + key + ); + } + + if (this._changed.get('version')) { + env.sqlColumns.push('version'); + env.sqlValues.push(this._changed.get('version') || 0); + } + + if (this._changed.get('synced')) { + env.sqlColumns.push('synced'); + env.sqlValues.push(this._changed.get('synced') ? 1 : 0); + } + // Set synced to 0 by default + else if (!env.isNew && !env.options.skipSyncedUpdate) { + env.sqlColumns.push('synced'); + env.sqlValues.push(0); + } + + if (env.isNew || !env.options.skipClientDateModifiedUpdate) { + env.sqlColumns.push('clientDateModified'); + env.sqlValues.push(Zotero.DB.transactionDateTime); + } +}; + +Zotero.DataObject.prototype._finalizeSave = Zotero.Promise.coroutine(function* (env) { + for (let [field, val] of this._changed.entries()) { + Zotero.debug("CHANGED " + field + " is " + val); + this['_' + field] = val; + } + this._changed.clear(); + + // Relations + var newRelations = this._changed.get('relations'); + if (newRelations) { + let oldRelations = this._relations; + let toAdd, toRemove; + // Convert to individual JSON objects, diff, and convert back + if (this._relations) { + let oldRelationsJSON = oldRelations.map(x => JSON.stringify(x)); + let newRelationsJSON = newRelations.map(x => JSON.stringify(x)); + toAdd = Zotero.Utilities.arrayDiff(newRelationsJSON, oldRelationsJSON) + .map(x => JSON.parse(x)); + toRemove = Zotero.Utilities.arrayDiff(oldRelationsJSON, newRelationsJSON) + .map(x => JSON.parse(x)); + } + else { + toAdd = newRelations; + toRemove = []; + } + + if (toAdd.length) { + let sql = "INSERT INTO " + this._objectType + "Relations " + + "(" + this._ObjectsClass.idColumn + ", predicateID, object) VALUES "; + // Convert predicates to ids + for (let i = 0; i < toAdd.length; i++) { + toAdd[i][0] = yield Zotero.RelationPredicates.add(toAdd[i][0]); + env.relationsToRegister.push([toAdd[i][0], toAdd[i][1]]); + } + yield Zotero.DB.queryAsync( + sql + toAdd.map(x => "(?, ?, ?)").join(", "), + toAdd.map(x => [this.id, x[0], x[1]]) + .reduce((x, y) => x.concat(y)) + ); + } + + if (toRemove.length) { + for (let i = 0; i < toRemove.length; i++) { + let sql = "DELETE FROM " + this._objectType + "Relations " + + "WHERE " + this._ObjectsClass.idColumn + "=? AND predicateID=? AND object=?"; + yield Zotero.DB.queryAsync( + sql, + [ + this.id, + (yield Zotero.RelationPredicates.add(toRemove[i][0])), + toRemove[i][1] + ] + ); + env.relationsToUnregister.push([toRemove[i][0], toRemove[i][1]]); + } + } + } + + if (env.isNew) { + if (!env.skipCache) { + // Register this object's identifiers in Zotero.DataObjects. This has to happen here so + // that the object exists for the reload() in objects' finalizeSave methods. + this.ObjectsClass.registerObject(this); + } + // If object isn't being reloaded, disable it, since its data may be out of date + else { + this._disabled = true; + } + } + else if (env.skipCache) { + Zotero.logError("skipCache is only for new objects"); + } +}); + + +/** + * Actions to perform after DB transaction + */ +Zotero.DataObject.prototype._postSave = function (env) { + for (let [field, value] of this._changed.entries()) { + this[field] = value; + } + this._changed.clear(); + + for (let i = 0; i < env.relationsToRegister.length; i++) { + let rel = env.relationsToRegister[i]; + Zotero.debug(rel); + Zotero.Relations.register(this._objectType, this.id, rel[0], rel[1]); + } + for (let i = 0; i < env.relationsToUnregister.length; i++) { + let rel = env.relationsToUnregister[i]; + Zotero.Relations.unregister(this._objectType, this.id, rel[0], rel[1]); + } +}; + + +Zotero.DataObject.prototype._recoverFromSaveError = Zotero.Promise.coroutine(function* (env) { + yield this.reload(null, true); + this._clearChanged(); +}); + + +/** + * Update object version, efficiently + * + * Used by sync code + * + * @param {Integer} version + * @param {Boolean} [skipDB=false] + */ +Zotero.DataObject.prototype.updateVersion = Zotero.Promise.coroutine(function* (version, skipDB) { + if (!this.id) { + throw new Error("Cannot update version of unsaved " + this._objectType); + } + if (version != parseInt(version)) { + throw new Error("'version' must be an integer"); + } + + this._version = parseInt(version); + + if (!skipDB) { + var cl = this.ObjectsClass; + var sql = "UPDATE " + cl.table + " SET version=? WHERE " + cl.idColumn + "=?"; + yield Zotero.DB.queryAsync(sql, [parseInt(version), this.id]); + } + + if (this._changed.get('version')) { + this._changed.delete('version'); + } +}); + +/** + * Update object sync status, efficiently + * + * Used by sync code + * + * @param {Boolean} synced + * @param {Boolean} [skipDB=false] + */ +Zotero.DataObject.prototype.updateSynced = Zotero.Promise.coroutine(function* (synced, skipDB) { + if (!this.id) { + throw new Error("Cannot update sync status of unsaved " + this._objectType); + } + if (typeof synced != 'boolean') { + throw new Error("'synced' must be a boolean"); + } + + this._synced = synced; + + if (!skipDB) { + var cl = this.ObjectsClass; + var sql = "UPDATE " + cl.table + " SET synced=? WHERE " + cl.idColumn + "=?"; + yield Zotero.DB.queryAsync(sql, [synced ? 1 : 0, this.id]); + } + + if (this._changed.get('synced')) { + this._changed.delete('synced'); + } +}); + +/** + * Delete object from database + * + * @param {Object} [options] + * @param {Boolean} [options.deleteItems] - Move descendant items to trash (Collection only) + * @param {Boolean} [options.skipDeleteLog] - Don't add to sync delete log + */ +Zotero.DataObject.prototype.erase = Zotero.Promise.coroutine(function* (options = {}) { + if (!options || typeof options != 'object') { + throw new Error("'options' must be an object (" + typeof options + ")"); + } + + var env = { + options: Object.assign({}, options) + }; + + if (!env.options.tx && !Zotero.DB.inTransaction()) { + Zotero.logError("erase() called on Zotero." + this._ObjectType + " without a wrapping " + + "transaction -- use eraseTx() instead"); + Zotero.debug((new Error).stack, 2); + env.options.tx = true; + } + + let proceed = yield this._initErase(env); + if (!proceed) return false; + + Zotero.debug('Deleting ' + this.objectType + ' ' + this.id); + + if (env.options.tx) { + return Zotero.DB.executeTransaction(function* () { + yield this._eraseData(env); + yield this._finalizeErase(env); + }.bind(this)) + } + else { + Zotero.DB.requireTransaction(); + yield this._eraseData(env); + yield this._finalizeErase(env); + } +}); + +Zotero.DataObject.prototype.eraseTx = function (options) { + options = options || {}; + options.tx = true; + return this.erase(options); +}; + +Zotero.DataObject.prototype._initErase = Zotero.Promise.method(function (env) { + env.notifierData = {}; + env.notifierData[this.id] = { + libraryID: this.libraryID, + key: this.key + }; + + if (!env.options.skipEditCheck) this.editCheck(); + + if (env.options.skipDeleteLog) { + env.notifierData[this.id].skipDeleteLog = true; + } + + return true; +}); + +Zotero.DataObject.prototype._finalizeErase = Zotero.Promise.coroutine(function* (env) { + // Delete versions from sync cache + if (this._objectType != 'feedItem') { + yield Zotero.Sync.Data.Local.deleteCacheObjectVersions( + this.objectType, this._libraryID, this._key + ); + } + + Zotero.DB.addCurrentCallback("commit", function () { + this.ObjectsClass.unload(env.deletedObjectIDs || this.id); + }.bind(this)); + + if (!env.options.skipNotifier) { + Zotero.Notifier.queue( + 'delete', + this._objectType, + Object.keys(env.notifierData).map(id => parseInt(id)), + env.notifierData, + env.options.notifierQueue + ); + } +}); + + +Zotero.DataObject.prototype.toResponseJSON = function (options = {}) { + // TODO: library block? + + var json = { + key: this.key, + version: this.version, + meta: {}, + data: this.toJSON(options) + }; + if (options.version) { + json.version = json.data.version = options.version; + } + return json; +} + + +Zotero.DataObject.prototype._preToJSON = function (options) { + var env = { options }; + env.mode = options.mode || 'new'; + if (env.mode == 'patch') { + if (!options.patchBase) { + throw new Error("Cannot use patch mode if patchBase not provided"); + } + } + else if (options.patchBase) { + if (options.mode) { + Zotero.debug("Zotero.Item.toJSON: ignoring provided patchBase in " + env.mode + " mode", 2); + } + // If patchBase provided and no explicit mode, use 'patch' + else { + env.mode = 'patch'; + } + } + return env; +} + +Zotero.DataObject.prototype._postToJSON = function (env) { + if (env.mode == 'patch') { + env.obj = Zotero.DataObjectUtilities.patch(env.options.patchBase, env.obj); + } + if (env.options.includeVersion === false) { + delete env.obj.version; + } + return env.obj; +} + + +/** + * Generates data object key + * @return {String} key + */ +Zotero.DataObject.prototype._generateKey = function () { + return Zotero.Utilities.generateObjectKey(); +} + +Zotero.DataObject.prototype._disabledCheck = function () { + if (this._disabled) { + Zotero.logError(this._ObjectType + " is disabled -- " + + "use Zotero." + this._ObjectTypePlural + ".getAsync()"); + } +} diff --git a/chrome/content/zotero/xpcom/undo.js b/chrome/content/zotero/xpcom/undo.js new file mode 100644 index 0000000000..4fee760f0a --- /dev/null +++ b/chrome/content/zotero/xpcom/undo.js @@ -0,0 +1,98 @@ +/* + ***** BEGIN LICENSE BLOCK ***** + + Copyright © 2019 Corporation for Digital Scholarship + Vienna, Virginia, USA + https://www.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 . + + ***** END LICENSE BLOCK ***** +*/ + +Zotero.UndoStack = function (maxUndo) { + this.maxUndo = maxUndo || 20; + this._stack = []; +} + +Zotero.UndoStack.prototype = { + _index: 0, + + addBatch: function (name, steps) { + // Remove forward from the current index and from the beginning to stay below the max size + var start = Math.max((this._index + 1) - this.maxUndo, 0); + this._stack = this._stack.slice(start, this._index); + + this._stack.push({ name, steps }); + this._index = this._stack.length; + + this._update(); + }, + + undo: async function () { + var steps = this._stack[--this._index].steps; + for (let step of steps) { + await step.undo(); + } + this._update(); + }, + + redo: async function () { + var batch = this._stack[this._index++].steps; + for (let step of steps) { + await step.redo(); + } + this._update(); + }, + + clear: function () { + this._stack = []; + this._index = 0; + this._update(); + }, + + _update: function () { + var win = Zotero.getTopWindow(); + if (!win) { + return; + } + var doc = win.document; + var undoMenuItem = doc.getElementById('menu_undo'); + var redoMenuItem = doc.getElementById('menu_redo'); + var undoCmd = doc.getElementById('cmd_undo'); + var redoCmd = doc.getElementById('cmd_redo'); + var undoStep = this._stack[this._index - 1]; + var redoStep = this._stack[this._index]; + + if (undo) { + undoMenuItem.label = undoStep ? Zotero.getString('general.undoX', undoStep.name) : null; + undoCmd.removeAttribute('disabled'); + } + else { + undoMenuItem.label = Zotero.getString('general.undo'); + undoCmd.setAttribute('disabled', 'disabled'); + } + + if (redoStep) { + redoMenuItem.label = redo ? Zotero.getString('general.redoX', redoStep.name) : null; + redoCmd.removeAttribute('disabled'); + } + else { + redoMenuItem.label = Zotero.getString('general.redo'); + redoCmd.setAttribute('disabled', 'disabled'); + } + } +}; \ No newline at end of file diff --git a/chrome/locale/af-ZA/zotero/zotero.properties b/chrome/locale/af-ZA/zotero/zotero.properties index 013c809c55..ae30dd2762 100644 --- a/chrome/locale/af-ZA/zotero/zotero.properties +++ b/chrome/locale/af-ZA/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Press %S to upgrade now. upgrade.dbUpdateRequired=The Zotero database must be updated. upgrade.integrityCheckFailed=Your Zotero database must be repaired before the upgrade can continue. upgrade.loadDBRepairTool=Load Database Repair Tool -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=If you continue to receive this message, restart your computer. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/cs-CZ/zotero/zotero.properties b/chrome/locale/cs-CZ/zotero/zotero.properties index d0b0c63b1e..5d5cff036a 100644 --- a/chrome/locale/cs-CZ/zotero/zotero.properties +++ b/chrome/locale/cs-CZ/zotero/zotero.properties @@ -597,7 +597,7 @@ ingester.scrapeErrorDescription.linkText=Řešení problémů s překladači ingester.scrapeErrorDescription.previousError=Ukládání selhalo z důvodu předchozí chyby v Zoteru. ingester.importFile.title=Importovat soubor -ingester.importFile.text=Chcete importovat soubor "%S"?\n\nPoložky budou přidány do nové kolekce. +ingester.importFile.text=Chcete importovat soubor "%S"? ingester.importFile.intoNewCollection=Vložit do nové kolekce ingester.lookup.performing=Provádí se vyhledávání... diff --git a/chrome/locale/de/zotero/zotero.properties b/chrome/locale/de/zotero/zotero.properties index adfd367409..1718c04d4e 100644 --- a/chrome/locale/de/zotero/zotero.properties +++ b/chrome/locale/de/zotero/zotero.properties @@ -254,7 +254,7 @@ pane.collections.menu.export.feed=Feed exportieren... pane.collections.menu.createBib.collection=Bibliografie aus Sammlung erstellen... pane.collections.menu.createBib.savedSearch=Literaturverzeichnis aus gespeicherter Suche erstellen... pane.collections.menu.createBib.feed=Literaturverzeichnis aus Feed erstellen... -pane.collections.showCollectionInLibrary=Show Collection in Library +pane.collections.showCollectionInLibrary=Sammlung in Bibliothek anzeigen pane.collections.menu.generateReport.collection=Bericht aus Sammlung erstellen... pane.collections.menu.generateReport.savedSearch=Bericht aus gespeicherter Suche erstellen... @@ -364,7 +364,7 @@ pane.item.notes.delete.confirm=Sind Sie sicher, dass Sie diese Notiz löschen m pane.item.notes.count.zero=%S Notizen: pane.item.notes.count.singular=%S Notiz: pane.item.notes.count.plural=%S Notizen: -pane.item.notes.editingInWindow=Editing in separate window +pane.item.notes.editingInWindow=In einem neuen Fenster bearbeiten pane.item.attachments.rename.title=Neuer Titel: pane.item.attachments.rename.renameAssociatedFile=Zugehörige Datei umbenennen pane.item.attachments.rename.error=Beim Umbenennen der Datei trat ein Fehler auf. @@ -656,9 +656,9 @@ zotero.preferences.sync.reset.restoreFromServer=Alle Daten des verwendeten Zoter zotero.preferences.sync.reset.replaceLocalData=Lokale Daten ersetzen zotero.preferences.sync.reset.restartToComplete=Firefox muss neugestartet werden, um den Wiederherstellungsprozess abzuschließen. zotero.preferences.sync.reset.restoreToServer=%1$S will replace data in “%2$S” on %3$S with data from this computer. -zotero.preferences.sync.reset.restoreToServer.button=Replace Data in Online Library -zotero.preferences.sync.reset.fileSyncHistory=On the next sync, %1$S will check all attachment files in “%2$S” against the storage service. Any remote attachment files that are missing locally will be downloaded, and local attachment files missing remotely will be uploaded.\n\nThis option is not necessary during normal usage. -zotero.preferences.sync.reset.fileSyncHistory.cleared=The file sync history for “%S” has been cleared. +zotero.preferences.sync.reset.restoreToServer.button=Daten in Online-Bibliothek ersetzen +zotero.preferences.sync.reset.fileSyncHistory=Bei der nächsten Synchronisation wird %1$S alle Dateianhänge in "%2$S" mit dem Speicherdienst vergleichen. Alle Dateianhänge auf dem entfernten Speicher die auf dem lokalen System fehlen werden heruntergeladen, alle lokal vorhandenen Dateianhänge die auf dem entfernten Speicher fehlen werden hochgeladen.\n\nDiese Option ist im normalen Betrieb nicht erforderlich. +zotero.preferences.sync.reset.fileSyncHistory.cleared=Die Verlaufsgeschichte der Dateisynchronisierung von "%S" wurde zurückgesetzt zotero.preferences.search.rebuildIndex=Index neu aufbauen zotero.preferences.search.rebuildWarning=Wollen Sie den gesamten Index neu aufbauen? Dies kann eine Weile dauern.\n\nUm nur die noch nicht indizierten Einträge zu indizieren, verwenden Sie %S. @@ -898,10 +898,10 @@ integration.citationChanged.description=Wenn Sie "Ja" auswählen, wird Zotero di integration.citationChanged.edit=Sie haben Veränderungen an dieser Zitation vorgenommen, nachdem sie von Zotero erstellt wurde. Das Editieren wird Ihre Veränderungen löschen. Wollen Sie fortsetzen? integration.citationChanged.original=Original: %S integration.citationChanged.modified=Geändert: %S -integration.delayCitationUpdates.alert.text1=Updating citations in this document is taking a long time. Would you like to disable automatic citation updates? +integration.delayCitationUpdates.alert.text1=Zitationen in diesem Dokument zu aktualisieren braucht lange. Möchten sie die automatische Aktualisierung von Zitationen deaktivieren? integration.delayCitationUpdates.alert.text2.toolbar=Sie müssen auf Aktualisieren in der Zotero-Werkzeugleiste klicken, nachdem Sie die Zitationen eingefügt haben. integration.delayCitationUpdates.alert.text2.tab=Sie müssen auf Aktualisieren im Zotero-Reiter klicken, nachdem Sie die Zitationen eingefügt haben. -integration.delayCitationUpdates.alert.text3=You can change this setting later in the document preferences. +integration.delayCitationUpdates.alert.text3=Sie können diese Einstellungen später in den Dokument Einstellungen ändern integration.delayCitationUpdates.bibliography.toolbar=Automatische Updates der Zitationen sind deaktiviert. Um das Literaturverzeichnis anzuzeigen, klicken Sie auf Aktualisieren in der Zotero-Werkzeugleiste. integration.delayCitationUpdates.bibliography.tab=Automatische Updates der Zitationen sind deaktiviert. Um das Literaturverzeichnis anzuzeigen, klicken Sie auf Aktualisieren im Zotero-Reiter. integration.importDocument.title=Transferiertes Dokument @@ -960,12 +960,12 @@ sync.error.checkConnection=Fehler bei der Verbindung zum Server. Überprüfen Si sync.error.emptyResponseServer=Inhaltsleere Serverantwort sync.error.invalidCharsFilename=Der Dateiname '%S' enthäte ungültige Zeichen. \n \n Bennen Sie die Datei um und versuchen Sie es erneut. Wenn Sie die Datei außerhalb von zotero, z. B. im Explorer bzw. Finder usw. umbennen, dann müssen Sie in Zotero die Verknüpfungen neu herstellen. sync.error.apiKeyInvalid=%S konnte ihren Account nicht authentifizieren. Bitte geben Sie ihre Kontendaten neu ein. -sync.error.collectionTooLong=The collection name “%S” is too long to sync. Shorten the name and sync again. +sync.error.collectionTooLong=Der Name der Sammlung "%S" ist zu lang für die Synchronisierung. Bitte den Namen kürzen und erneut synchronisieren. sync.error.fieldTooLong=The %1$S value “%2$S” in one of your items is too long to sync. Shorten the field and sync again. -sync.error.creatorTooLong=The creator name “%S” in one of your items is too long to sync. Shorten the field and sync again. -sync.error.noteEmbeddedImage=Notes with embedded images cannot currently be synced. Syncing of embedded images may be supported in a future version. -sync.error.noteTooLong=The note “%S” is too long to sync. Shorten the note and sync again. -sync.error.reportSiteIssuesToForums=If you receive this message repeatedly for items saved from a particular site, you can report this issue in the %S Forums. +sync.error.creatorTooLong=Der Name des Urhebers "%S" in einem Ihrer Einträge ist zu lang für die Synchronisierung. Bitte den Namen kürzen und erneut synchronisieren. +sync.error.noteEmbeddedImage=Notizen mit eingebetteten Bildern können zur Zeit nicht synchronisiert werden. Die Synchronisation von eingebetteten Bildern wird vielleicht in einer zukünftigen Version unterstützt. +sync.error.noteTooLong=Die Notiz "$S" ist zu lang für die Synchronisation. Bitte die Notiz kürzen und erneut synchronisieren. +sync.error.reportSiteIssuesToForums=Wenn Sie diese Nachricht wiederholt für von einer bestimmten Seite gespeicherte Einträge erhalten, können sie den Fall im %S Forum melden. sync.error.invalidDataError=Einige Daten in %S konnten nicht heruntergeladen werden. Möglicherweise wurden es mit einer neueren Version von %S gespeichert. sync.error.invalidDataError.otherData=Andere Daten werden weiterhin synchronisiert. @@ -1011,7 +1011,7 @@ sync.conflict.chooseThisVersion=Diese Version auswählen sync.status.notYetSynced=Noch nicht synchronisiert sync.status.lastSync=Letzte Synchronisierung: sync.status.waiting=Waiting for other operations to finish -sync.status.preparing=Preparing sync +sync.status.preparing=Synchronisation wird vorbereitet sync.status.loggingIn=Einloggen auf dem Sync-Server sync.status.gettingUpdatedData=Aktualisierte Daten vom Sync-Server empfangen sync.status.processingUpdatedData=Aktualisierte Daten vom Sync-Server verarbeiten diff --git a/chrome/locale/el-GR/zotero/zotero.dtd b/chrome/locale/el-GR/zotero/zotero.dtd index 536f30951c..76f0857e7b 100644 --- a/chrome/locale/el-GR/zotero/zotero.dtd +++ b/chrome/locale/el-GR/zotero/zotero.dtd @@ -92,8 +92,8 @@ - - + + @@ -119,8 +119,8 @@ - - + + @@ -151,7 +151,7 @@ - + @@ -163,8 +163,8 @@ - - + + @@ -209,7 +209,7 @@ - + diff --git a/chrome/locale/el-GR/zotero/zotero.properties b/chrome/locale/el-GR/zotero/zotero.properties index ca3e5c342c..2ec97420e1 100644 --- a/chrome/locale/el-GR/zotero/zotero.properties +++ b/chrome/locale/el-GR/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Πατήστε %S για να αναβαθμίσετε τ upgrade.dbUpdateRequired=Η βάση δεδομένων του Zotero πρέπει να αναβαθμιστεί. upgrade.integrityCheckFailed=Η βάση δεδομένων του Zotero πρέπει να επισκευασθεί πριν προχωρήσει η αναβάθμιση. upgrade.loadDBRepairTool=Φόρτωση Εργαλείου Επισκευής Βάσης Δεδομένων -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=Αν συνεχίσετε να λαμβάνεται το μήνυμα αυτό, επανεκκινήστε τον υπολογιστή σας. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/eu-ES/zotero/zotero.properties b/chrome/locale/eu-ES/zotero/zotero.properties index 38536d15f7..f71023e7d4 100644 --- a/chrome/locale/eu-ES/zotero/zotero.properties +++ b/chrome/locale/eu-ES/zotero/zotero.properties @@ -263,9 +263,9 @@ pane.collections.menu.generateReport.feed=Generate Report from Feed… pane.collections.menu.refresh.feed=Refresh Feed pane.tagSelector.rename.title=Aldatu estekaren izena -pane.tagSelector.rename.message=Sar ezazu izen berria.\n\n Esteka dagozkion item guztietan aldatuko da. +pane.tagSelector.rename.message=Sar ezazu izen berria.\n\nEsteka dagozkion item guztietan aldatuko da. pane.tagSelector.delete.title=Ezabatu esteka -pane.tagSelector.delete.message=Benetan ezabatu esteka?\n\n Esteka dagozkion item guztietatik kenduko da. +pane.tagSelector.delete.message=Benetan ezabatu esteka?\n\nEsteka dagozkion item guztietatik kenduko da. pane.tagSelector.deleteAutomatic.title=Delete Automatic Tags pane.tagSelector.deleteAutomatic.message=Are you sure you want to delete %1$S automatic tag in this library?;Are you sure you want to delete %1$S automatic tags in this library? pane.tagSelector.numSelected.none=Estekarik hautatu gabe @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/fa/zotero/zotero.properties b/chrome/locale/fa/zotero/zotero.properties index daecb95e21..c132a41379 100644 --- a/chrome/locale/fa/zotero/zotero.properties +++ b/chrome/locale/fa/zotero/zotero.properties @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/fi-FI/zotero/zotero.properties b/chrome/locale/fi-FI/zotero/zotero.properties index fedce1e778..608ae445c1 100644 --- a/chrome/locale/fi-FI/zotero/zotero.properties +++ b/chrome/locale/fi-FI/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Paina %S päivittääksesi nyt. upgrade.dbUpdateRequired=Zoteron tietokanta on päivitettävä. upgrade.integrityCheckFailed=Zotero-tietokantasi on korjattava ennen päivityksen jatkamista. upgrade.loadDBRepairTool=Lataa tietokannan korjaustyökalu -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=Jos saat toistuvasti tämän viestin, käynnistä tietokone uudelleen. upgrade.nonupgradeableDB1=Zotero löysi vanhan tietokannan jota ei voi päivittää yhteensopivaksi tämän Zoteron version kanssa. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. diff --git a/chrome/locale/gl-ES/zotero/zotero.properties b/chrome/locale/gl-ES/zotero/zotero.properties index cc63eea757..1bd0a340f9 100644 --- a/chrome/locale/gl-ES/zotero/zotero.properties +++ b/chrome/locale/gl-ES/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Prema agora %S para actualizar . upgrade.dbUpdateRequired=A base de datos de Zotero ten que ser actualizada. upgrade.integrityCheckFailed=Tense que reparar a súa base de datos de Zotero antes de que se poida continuar a actualización. upgrade.loadDBRepairTool=Cargar a ferramenta de reparación da base de datos -upgrade.couldNotMigrate=Zotero non puido migrar todos os arquivos necesarios. \nPeche os ficheiros abertos e reinicie %S para tentar a actualización de novo. +upgrade.couldNotMigrate=Zotero non puido migrar todos os arquivos necesarios.\nPeche os ficheiros abertos e reinicie %S para tentar a actualización de novo. upgrade.couldNotMigrate.restart=Reinicie o ordenador se continúa a recibir esta mensaxe. upgrade.nonupgradeableDB1=Atopouse unha base de datos doutra versión de Zotero que non se pode actualizar para que funcione con esta versión de Zotero. upgrade.nonupgradeableDB2=Para poder continuar e crear unha nova base de datos, primeiro anova a base de datos empregando Zotero %S ou elimina o cartafol os datos de Zotero @@ -348,7 +348,7 @@ pane.item.markAsRead=Marcar como lido pane.item.markAsUnread=Marcar como sen ler pane.item.addTo=Engadir a «%S» pane.item.showInMyPublications=Mostrar nas publicacións -pane.item.hideFromMyPublications=Agochar +pane.item.hideFromMyPublications=Hide from My Publications pane.item.changeType.title=Cambiar o tipo de elemento pane.item.changeType.text=Está seguro de que quere cambiar o tipo de elemento?\n\nPerderanse os seguintes campos: pane.item.defaultFirstName=primeiro diff --git a/chrome/locale/he-IL/zotero/zotero.properties b/chrome/locale/he-IL/zotero/zotero.properties index cd96891753..779e5bf7b6 100644 --- a/chrome/locale/he-IL/zotero/zotero.properties +++ b/chrome/locale/he-IL/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Press %S to upgrade now. upgrade.dbUpdateRequired=יש לעדכן את בסיס הנתונים של זוטרו. upgrade.integrityCheckFailed=Your Zotero database must be repaired before the upgrade can continue. upgrade.loadDBRepairTool=Load Database Repair Tool -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=If you continue to receive this message, restart your computer. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/hr-HR/zotero/zotero.properties b/chrome/locale/hr-HR/zotero/zotero.properties index 013c809c55..ae30dd2762 100644 --- a/chrome/locale/hr-HR/zotero/zotero.properties +++ b/chrome/locale/hr-HR/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Press %S to upgrade now. upgrade.dbUpdateRequired=The Zotero database must be updated. upgrade.integrityCheckFailed=Your Zotero database must be repaired before the upgrade can continue. upgrade.loadDBRepairTool=Load Database Repair Tool -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=If you continue to receive this message, restart your computer. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/hu-HU/zotero/zotero.properties b/chrome/locale/hu-HU/zotero/zotero.properties index 84cfd9ebdf..6c25a29d63 100644 --- a/chrome/locale/hu-HU/zotero/zotero.properties +++ b/chrome/locale/hu-HU/zotero/zotero.properties @@ -18,8 +18,8 @@ general.unknownErrorOccurred=Ismeretlen hiba. general.invalidResponseServer=Érvénytelen válasz a szervertől. general.tryAgainLater=Kérem, próbálkozzon újra néhány perc múlva. general.serverError=A szerver hibába fordult. Kérem próbálja újra. -general.pleaseRestart=Indítsa újra a Firefoxot. -general.pleaseRestartAndTryAgain=Indítsa újra a Firefoxot és próbálja meg újra. +general.pleaseRestart=Please restart %S. +general.pleaseRestartAndTryAgain=Please restart %S and try again. general.checkForUpdate=Frissítések keresése general.checkForUpdates=Frissítések keresése general.actionCannotBeUndone=Ez a művelet nem vonható vissza. @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector hiba firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=A Zotero ikon mostantól a Firefox eszköztárán található. A Zotero megnyitásához kattintson az ikonra, vagy használja a %S gyorsbillentyűt. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/is-IS/zotero/zotero.properties b/chrome/locale/is-IS/zotero/zotero.properties index c77e631578..7405057fe0 100644 --- a/chrome/locale/is-IS/zotero/zotero.properties +++ b/chrome/locale/is-IS/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Ýtið á %S til að uppfæra núna. upgrade.dbUpdateRequired=Uppfæra þarf Zotero gagnagrunninn. upgrade.integrityCheckFailed=Það verður að laga Zotero gagnagrunninn áður en uppfærslan getur haldið áfram. upgrade.loadDBRepairTool=Hlaða inn verkfæri til viðgerða á gagnagrunni -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=Ef þú heldur áfram að fá þessi skilaboð skaltu endurræsa tölvuna þína. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. diff --git a/chrome/locale/it-IT/zotero/zotero.properties b/chrome/locale/it-IT/zotero/zotero.properties index e145bfe3df..7071044f83 100644 --- a/chrome/locale/it-IT/zotero/zotero.properties +++ b/chrome/locale/it-IT/zotero/zotero.properties @@ -597,7 +597,7 @@ ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues ingester.scrapeErrorDescription.previousError=Processo di salvataggio non riuscito a causa di un precedente errore di Zotero. ingester.importFile.title=Importa File -ingester.importFile.text=Importare il file "%S"?\n\nElementi saranno aggiunti ad una nuova collezione. +ingester.importFile.text=Importare il file "%S"? ingester.importFile.intoNewCollection=Importa in una nuova collezione ingester.lookup.performing=Esecuzione ricerca... @@ -661,7 +661,7 @@ zotero.preferences.sync.reset.fileSyncHistory=On the next sync, %1$S will check zotero.preferences.sync.reset.fileSyncHistory.cleared=The file sync history for “%S” has been cleared. zotero.preferences.search.rebuildIndex=Ricrea indicizzazione -zotero.preferences.search.rebuildWarning=Ricreare l'intera indicizzazione? L'operazione potrebbe richiedere alcuni minuti.\n Per processare solo gli elementi non indicizzati, selezionare '%S' +zotero.preferences.search.rebuildWarning=Ricreare l'intera indicizzazione? L'operazione potrebbe richiedere alcuni minuti.\n\nPer processare solo gli elementi non indicizzati, selezionare '%S' zotero.preferences.search.clearIndex=Azzera indicizzazione zotero.preferences.search.clearWarning=Dopo l'azzeramento dell'indicizzazione non sarà più possibile ricercare gli allegati,\n\n né sarà più possibile indicizzare i collegamenti se non visitando nuovamente la pagina web. Per mantenere i collegamenti selezionare '%S' zotero.preferences.search.clearNonLinkedURLs=Elimina tutto tranne i collegamenti web diff --git a/chrome/locale/ko-KR/zotero/zotero.properties b/chrome/locale/ko-KR/zotero/zotero.properties index 12b37e44f5..101b5906af 100644 --- a/chrome/locale/ko-KR/zotero/zotero.properties +++ b/chrome/locale/ko-KR/zotero/zotero.properties @@ -1165,8 +1165,8 @@ connector.name=%S 중계기 connector.error.title=Zotero 커넥터 오류 firstRunGuidance.authorMenu=편집자나 번역자 등을 입력할 수도 있습니다. 작가 탭의 메뉴에서 편집자나 번역가 등을 선택하시면 됩니다. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Zotero를 열려면 'Z' 버튼을 클릭하거나, %S 키보드 단축키를 사용하세요. firstRunGuidance.toolbarButton.upgrade=이제 Zotero 아이콘을 Firefox 도구모음에서 찾을 수 있습니다. Zotero를 열려면 'Z' 버튼을 클릭하거나, %S 키보드 단축키를 사용하세요. firstRunGuidance.saveButton=이 버튼을 누르면 어떤 웹페이지든 Zotero 라이브러리에 저장합니다. 어떤 페이지에서는, Zotero가 저자와 날짜를 포함한 모든 세부사항을 저장할 수 있습니다. diff --git a/chrome/locale/mn-MN/zotero/zotero.properties b/chrome/locale/mn-MN/zotero/zotero.properties index fa39fe2aa8..394d064e65 100644 --- a/chrome/locale/mn-MN/zotero/zotero.properties +++ b/chrome/locale/mn-MN/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Press %S to upgrade now. upgrade.dbUpdateRequired=The Zotero database must be updated. upgrade.integrityCheckFailed=Your Zotero database must be repaired before the upgrade can continue. upgrade.loadDBRepairTool=Load Database Repair Tool -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=If you continue to receive this message, restart your computer. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/nb-NO/zotero/zotero.properties b/chrome/locale/nb-NO/zotero/zotero.properties index 15ec44e73c..6a32411142 100644 --- a/chrome/locale/nb-NO/zotero/zotero.properties +++ b/chrome/locale/nb-NO/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Velg %S for å oppgradere nå. upgrade.dbUpdateRequired=Zotero-databasen må oppdateres. upgrade.integrityCheckFailed=Zotero-databasen må repareres før oppgraderingen kan fortsette. upgrade.loadDBRepairTool=Last inn databasereparasjonsverktøy -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=Hvis du fortsetter å få denne meldingen, start datamaskinen din på nytt. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -663,7 +663,7 @@ zotero.preferences.sync.reset.fileSyncHistory.cleared=The file sync history for zotero.preferences.search.rebuildIndex=Generer register på nytt zotero.preferences.search.rebuildWarning=Vil du generere registeret på nytt? Dette kan ta en stund.\n\nHvis du bare vil registrere elementer som ikke allerede er registrert, bruk %S. zotero.preferences.search.clearIndex=Tøm registeret -zotero.preferences.search.clearWarning=Når registeret er tømt, vil vedlagt materiale ikke lenger være søkbart.\n\n Internett-lenker kan kun registreres på nytt ved å besøke den enkelte nettsiden. For å beholde Internett-lenker, velg %S. +zotero.preferences.search.clearWarning=Når registeret er tømt, vil vedlagt materiale ikke lenger være søkbart.\n\nInternett-lenker kan kun registreres på nytt ved å besøke den enkelte nettsiden. For å beholde Internett-lenker, velg %S. zotero.preferences.search.clearNonLinkedURLs=Tøm alt unntatt Internett-lenker zotero.preferences.search.indexUnindexed=Registrer uregistrerte elementer zotero.preferences.export.quickCopy.citationStyles=Citation Styles @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/nn-NO/zotero/zotero.properties b/chrome/locale/nn-NO/zotero/zotero.properties index 7541944f56..e8128c0639 100644 --- a/chrome/locale/nn-NO/zotero/zotero.properties +++ b/chrome/locale/nn-NO/zotero/zotero.properties @@ -663,7 +663,7 @@ zotero.preferences.sync.reset.fileSyncHistory.cleared=The file sync history for zotero.preferences.search.rebuildIndex=Generer register på nytt zotero.preferences.search.rebuildWarning=Vil du generera registret på nytt? Dette kan ta eit bel.\n\nHvis du berre vil registrera element som ikkje allereie er registrert, bruk %S. zotero.preferences.search.clearIndex=Tøm registret -zotero.preferences.search.clearWarning=Når registret er tømt, vil vedlagd material ikkje lenger vera søkbart.\n\n Internett-lenkjer kan berre registrerast på nytt ved å vitja den einskilde nettsida. For å halda på Internett-lenkjer, vel %S. +zotero.preferences.search.clearWarning=Når registret er tømt, vil vedlagd material ikkje lenger vera søkbart.\n\nInternett-lenkjer kan berre registrerast på nytt ved å vitja den einskilde nettsida. For å halda på Internett-lenkjer, vel %S. zotero.preferences.search.clearNonLinkedURLs=Tøm alt unntatt Internett-lenkjar zotero.preferences.search.indexUnindexed=Registrer uregistrerte element zotero.preferences.export.quickCopy.citationStyles=Citation Styles @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync servar sync.status.gettingUpdatedData=Får oppdaterte data frå synkroniseringstenaren sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Lastar opp data til synkroniseringstenaren -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Synkroniserar filer sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/sr-RS/zotero/zotero.properties b/chrome/locale/sr-RS/zotero/zotero.properties index 7d52b7fca4..2a39a26260 100644 --- a/chrome/locale/sr-RS/zotero/zotero.properties +++ b/chrome/locale/sr-RS/zotero/zotero.properties @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/locale/vi-VN/zotero/zotero.properties b/chrome/locale/vi-VN/zotero/zotero.properties index d1f17088de..dc2c6d93fe 100644 --- a/chrome/locale/vi-VN/zotero/zotero.properties +++ b/chrome/locale/vi-VN/zotero/zotero.properties @@ -103,7 +103,7 @@ upgrade.advanceMessage=Ấn %S để nâng cấp ngay bây giờ. upgrade.dbUpdateRequired=The Zotero database must be updated. upgrade.integrityCheckFailed=Your Zotero database must be repaired before the upgrade can continue. upgrade.loadDBRepairTool=Load Database Repair Tool -upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart Firefox to try the upgrade again. +upgrade.couldNotMigrate=Zotero could not migrate all necessary files.\nPlease close any open attachment files and restart %S to try the upgrade again. upgrade.couldNotMigrate.restart=If you continue to receive this message, restart your computer. upgrade.nonupgradeableDB1=Zotero found an old database that cannot be upgraded to work with this version of Zotero. upgrade.nonupgradeableDB2=To continue, upgrade your database using Zotero %S first or delete your Zotero data directory to start with a new database. @@ -1016,7 +1016,7 @@ sync.status.loggingIn=Logging in to sync server sync.status.gettingUpdatedData=Getting updated data from sync server sync.status.processingUpdatedData=Processing updated data sync.status.uploadingData=Uploading data to sync server -sync.status.uploadAccepted=Upload accepted — waiting for sync server +sync.status.uploadAccepted=Upload accepted \u2014 waiting for sync server sync.status.syncingFiles=Syncing files sync.status.syncingFilesInLibrary=Syncing files in %S sync.status.syncingFilesInLibraryWithRemaining=Syncing files in %1$S (%2$S remaining);Syncing files in %1$S (%2$S remaining) @@ -1165,8 +1165,8 @@ connector.name=%S Connector connector.error.title=Zotero Connector Error firstRunGuidance.authorMenu=Zotero lets you specify editors and translators, too. You can turn an author into an editor or translator by selecting from this menu. -firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. -firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-↓ to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormat=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Ctrl-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. +firstRunGuidance.quickFormatMac=Type a title or author to search for a reference.\n\nAfter you've made your selection, click the bubble or press Cmd-\u2193 to add page numbers, prefixes, or suffixes. You can also include a page number along with your search terms to add it directly.\n\nYou can edit citations directly in the word processor document. firstRunGuidance.toolbarButton.new=Click the ‘Z’ button to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.toolbarButton.upgrade=The Zotero icon can now be found in the Firefox toolbar. Click the icon to open Zotero, or use the %S keyboard shortcut. firstRunGuidance.saveButton=Click this button to save any web page to your Zotero library. On some pages, Zotero will be able to save full details, including author and date. diff --git a/chrome/skin/default/zotero/extensionsOverlay.css b/chrome/skin/default/zotero/extensionsOverlay.css new file mode 100644 index 0000000000..e7b77ebf28 --- /dev/null +++ b/chrome/skin/default/zotero/extensionsOverlay.css @@ -0,0 +1,3 @@ +.addon-view .legacy-warning { + display: none; +} \ No newline at end of file