Merge branch '3.1-l10n' into 3.1

Closes #264
This commit is contained in:
Dan Stillman 2013-03-05 03:44:09 -05:00
commit 476eb2745c
24 changed files with 288 additions and 285 deletions

View file

@ -51,7 +51,7 @@
<label class="zotero-text-link" href="http://www.zotero.org/support/credits_and_acknowledgments" value="&zotero.moreCreditsAndAcknowledgements;"/>
</vbox>
<vbox id="column2">
<label class="subhead" value="Citation &amp; Bibliography Processing"/>
<label class="subhead" value="&zotero.citationProcessing;"/>
<vbox class="subcontent">
<label class="zotero-text-link" href="http://citationstyles.org/" value="Citation Style Language"/>
<label class="zotero-text-link" href="http://bitbucket.org/fbennett/citeproc-js/" value="citeproc-js (Frank Bennett)"/>

View file

@ -214,7 +214,8 @@
// Access date
if (this.displayAccessed) {
this._id("accessed-label").value = Zotero.getString('itemFields.accessDate')+":";
this._id("accessed-label").value = Zotero.getString('itemFields.accessDate')
+ Zotero.getString('punctuation.colon');
this._id("accessed").value = Zotero.Date.sqlToDate(
this.item.getField('accessDate'), true
).toLocaleString();
@ -233,12 +234,11 @@
if (this.item.attachmentLinkMode
!= Zotero.Attachments.LINK_MODE_LINKED_URL
&& this.displayFileName) {
// TODO: localize
var fileName = this.item.getFilename();
if (fileName) {
// TODO: localize
this._id("fileName-label").value = "Filename:";
this._id("fileName-label").value = Zotero.getString('pane.item.attachments.filename')
+ Zotero.getString('punctuation.colon');
this._id("fileName").value = fileName;
fileNameRow.hidden = false;
}
@ -255,8 +255,8 @@
var pages = Zotero.Fulltext.getPages(this.item.id);
var pages = pages ? pages.total : null;
if (pages) {
// TODO: localize colon
this._id("pages-label").value = Zotero.getString('itemFields.pages') + ':';
this._id("pages-label").value = Zotero.getString('itemFields.pages')
+ Zotero.getString('punctuation.colon');
this._id("pages").value = pages;
pagesRow.hidden = false;
}
@ -269,7 +269,8 @@
}
if (this.displayDateModified) {
this._id("dateModified-label").value = Zotero.getString('itemFields.dateModified')+':';
this._id("dateModified-label").value = Zotero.getString('itemFields.dateModified')
+ Zotero.getString('punctuation.colon');
var mtime = this.item.attachmentModificationTime;
if (mtime) {
this._id("dateModified").value = new Date(mtime).toLocaleString();
@ -476,7 +477,8 @@
str = 'general.yes';
break;
}
this._id("index-status-label").value = Zotero.getString('fulltext.indexState.indexed') + ':';
this._id("index-status-label").value = Zotero.getString('fulltext.indexState.indexed')
+ Zotero.getString('punctuation.colon');
indexStatus.value = Zotero.getString(str);
// Reindex button tooltip (string stored in zotero.properties)

View file

@ -358,7 +358,7 @@
case 'attachment':
case 'note':
case 'storagefile':
objbox.buttonCaption = 'Choose this version';
objbox.buttonCaption = Zotero.getString('sync.conflict.chooseThisVersion');
break;
}
@ -478,7 +478,7 @@
<xul:box id="object-placeholder"/>
<xul:hbox id="delete-box" hidden="true" flex="1"
onclick="document.getBindingParent(this).chooseObj(this)">
<xul:label value="Deleted"/> <!-- TODO: localize -->
<xul:label value="&zotero.merge.deleted;"/>
</xul:hbox>
</xul:groupbox>
</content>

View file

@ -410,14 +410,14 @@
<method name="updateTagsSummary">
<body>
<![CDATA[
// TODO: localize
var v = this.id('tags').summary;
if (!v || v == "") {
v = "[" + Zotero.getString('pane.item.noteEditor.clickHere') + "]";
}
this.id('tagsLabel').value = Zotero.getString('pane.item.tags');
this.id('tagsLabel').value = Zotero.getString('itemFields.tags')
+ Zotero.getString('punctuation.colon');
this.id('tagsClick').value = v;
]]>
</body>
@ -446,7 +446,8 @@
v = "[" + Zotero.getString('pane.item.noteEditor.clickHere') + "]";
}
this.id('seeAlsoLabel').value = Zotero.getString('pane.item.related');
this.id('seeAlsoLabel').value = Zotero.getString('itemFields.related')
+ Zotero.getString('punctuation.colon');
this.id('seeAlsoClick').value = v;
]]>
</body>

View file

@ -44,8 +44,7 @@ var Zotero_Duplicates_Pane = new function () {
}
if (!item.isRegularItem() || [1,14].indexOf(item.itemTypeID) != -1) {
// TODO: localize
var msg = "Only top-level full items can be merged.";
var msg = Zotero.getString('pane.item.duplicates.onlyTopLevel');
ZoteroPane_Local.setItemPaneMessage(msg);
return false;
}
@ -57,8 +56,7 @@ var Zotero_Duplicates_Pane = new function () {
var msg = Zotero.getString('pane.item.selected.multiple', items.length);
}
else {
// TODO: localize
var msg = "Merged items must all be of the same item type.";
var msg = Zotero.getString('pane.item.duplicates.onlySameItemType');
}
ZoteroPane_Local.setItemPaneMessage(msg);
return false;
@ -112,7 +110,7 @@ var Zotero_Duplicates_Pane = new function () {
}, 0);
}
button.label = "Merge " + (otherItems.length + 1) + " items";
button.label = Zotero.getString('pane.item.duplicates.mergeItems', (otherItems.length + 1));
itembox.hiddenFields = diff ? [] : ['dateAdded', 'dateModified'];
fieldSelect.hidden = !diff;

View file

@ -5,9 +5,8 @@
<!DOCTYPE window SYSTEM "chrome://zotero/locale/zotero.dtd">
<!-- TODO: localize -->
<wizard xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
id="zotero-error-report" title="Zotero Error Report">
id="zotero-error-report" title="&zotero.errorReport.title;">
<script>
<![CDATA[
@ -69,14 +68,14 @@
if (!xmlhttp.responseXML){
try {
if (xmlhttp.status>1000){
alert('No network connection');
alert(Zotero.getString('errorReport.noNetworkConnection'));
}
else {
alert('Invalid response from repository');
alert(Zotero.getString('errorReport.invalidResponseRepository'));
}
}
catch (e){
alert('Repository cannot be contacted');
alert(Zotero.getString('errorReport.repoCannotBeContacted'));
}
wizard.rewind();
@ -86,7 +85,7 @@
var reported = xmlhttp.responseXML.getElementsByTagName('reported');
if (reported.length != 1) {
alert('Invalid response from repository');
alert(Zotero.getString('errorReport.invalidResponseRepository'));
wizard.rewind();
return;
}

View file

@ -364,9 +364,6 @@ var Zotero_File_Interface = new function() {
translation.translate(libraryID);
}, 0);
} else {
// TODO: localize and remove fileInterface.fileFormatUnsupported string
var unsupportedFormat = "The selected file is not in a supported format.";
var viewSupportedFormats = "View Supported Formats...";
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
@ -375,10 +372,10 @@ var Zotero_File_Interface = new function() {
var index = ps.confirmEx(
null,
"",
unsupportedFormat,
Zotero.getString("fileInterface.unsupportedFormat"),
buttonFlags,
null,
viewSupportedFormats,
Zotero.getString("fileInterface.viewSupportedFormats"),
null, null, {}
);
if (index == 1) {

View file

@ -266,15 +266,15 @@ var Zotero_Merge_Window = new function () {
function _setInstructionsString(buttonName) {
switch (_mergeGroup.type) {
case 'storagefile':
var msg = "The following file has been changed in multiple locations.";
var msg = Zotero.getString('sync.conflict.fileChanged');
break;
default:
// TODO: localize and maybe not always call it 'item'
var msg = "The following item has been changed in multiple locations.";
// TODO: cf. localization: maybe not always call it 'item'
var msg = Zotero.getString('sync.conflict.itemChanged');
}
msg += " Choose the version you would like to keep, and then click " + buttonName + ".";
msg += Zotero.getString('sync.conflict.chooseVersionToKeep', buttonName);
document.getElementById('zotero-merge-instructions').value = msg;
}

View file

@ -28,7 +28,7 @@
<?xml-stylesheet href="chrome://zotero/skin/zotero.css" type="text/css"?>
<?xml-stylesheet href="chrome://zotero/skin/merge.css" type="text/css"?>
<!-- <!DOCTYPE window SYSTEM "chrome://zotero/locale/merge.dtd"> -->
<!DOCTYPE window SYSTEM "chrome://zotero/locale/zotero.dtd">
<wizard
id="zotero-merge-window"
@ -44,13 +44,13 @@
<wizardpage onpageshow="Zotero_Merge_Window.init()"
onpagerewound="Zotero_Merge_Window.onBack(); return false"
onpageadvanced="return Zotero_Merge_Window.onNext()"
label="Conflict Resolution">
label="&zotero.merge.title;">
<description id="zotero-merge-instructions"/>
<zoteromergegroup flex="1"/>
<separator class="thin"/>
<hbox id="zotero-step-count">
<label id="zotero-merge-num-objects"/>
<label value="of"/>
<label value="&zotero.merge.of;"/>
<label id="zotero-merge-total-objects"/>
</hbox>
</wizardpage>

View file

@ -283,16 +283,11 @@ function updateStorageSettings(enabled, protocol, skipWarnings) {
var account = Zotero.Sync.Server.username;
var index = ps.confirmEx(
null,
// TODO: localize
"Purge Attachment Files on Zotero Servers?",
"If you plan to use WebDAV for file syncing and you previously synced attachment files in My Library "
+ "to the Zotero servers, you can purge those files from the Zotero servers to give you more "
+ "storage space for groups.\n\n"
+ "You can purge files at any time from your account settings on zotero.org.",
Zotero.getString('zotero.preferences.sync.purgeStorage.title'),
Zotero.getString('zotero.preferences.sync.purgeStorage.desc'),
buttonFlags,
"Purge Files Now",
"Do Not Purge", null, null, {}
Zotero.getString('zotero.preferences.sync.purgeStorage.confirmButton'),
Zotero.getString('zotero.preferences.sync.purgeStorage.cancelButton'), null, null, {}
);
if (index == 0) {
@ -478,11 +473,9 @@ function handleSyncReset(action) {
ps.alert(
null,
Zotero.getString('general.error'),
// TODO: localize
"You must enter a username and password in the "
+ document.getElementById('zotero-prefpane-sync')
.getElementsByTagName('tab')[0].label
+ " tab before using the reset options."
Zotero.getString('zotero.preferences.sync.reset.userInfoMissing',
document.getElementById('zotero-prefpane-sync')
.getElementsByTagName('tab')[0].label)
);
return;
}
@ -496,12 +489,10 @@ function handleSyncReset(action) {
+ ps.BUTTON_POS_1_DEFAULT;
var index = ps.confirmEx(
null,
// TODO: localize
Zotero.getString('general.warning'),
"All data in this copy of Zotero will be erased and replaced with "
+ "data belonging to user '" + account + "' on the Zotero server.",
Zotero.getString('zotero.preferences.sync.reset.restoreFromServer', account),
buttonFlags,
"Replace Local Data",
Zotero.getString('zotero.preferences.sync.reset.replaceLocalData'),
null, null, null, {}
);
@ -524,8 +515,7 @@ function handleSyncReset(action) {
var index = ps.confirmEx(
null,
Zotero.getString('general.restartRequired'),
// TODO: localize
"Firefox must be restarted to complete the restore process.",
Zotero.getString('zotero.preferences.sync.reset.restartToComplete'),
buttonFlags,
Zotero.getString('general.restartNow'),
null, null, null, {}
@ -557,14 +547,10 @@ function handleSyncReset(action) {
+ ps.BUTTON_POS_1_DEFAULT;
var index = ps.confirmEx(
null,
// TODO: localize
Zotero.getString('general.warning'),
"All data belonging to user '" + account + "' on the Zotero server "
+ "will be erased and replaced with data from this copy of Zotero.\n\n"
+ "Depending on the size of your library, there may be a delay before "
+ "your data is available on the server.",
Zotero.getString('zotero.preferences.sync.reset.restoreToServer', account),
buttonFlags,
"Replace Server Data",
Zotero.getString('zotero.preferences.sync.reset.replaceServerData'),
null, null, null, {}
);
@ -615,12 +601,10 @@ function handleSyncReset(action) {
+ ps.BUTTON_POS_1_DEFAULT;
var index = ps.confirmEx(
null,
// TODO: localize
Zotero.getString('general.warning'),
"All file sync history will be cleared.\n\n"
+ "Any local attachment files that do not exist on the storage server will be uploaded on the next sync.",
Zotero.getString('zotero.preferences.sync.reset.fileSyncHistory'),
buttonFlags,
"Reset",
Zotero.getString('general.reset'),
null, null, null, {}
);
@ -1509,7 +1493,6 @@ Zotero_Preferences.Debug_Output = {
},
// TODO: localize
submit: function () {
document.getElementById('debug-output-submit').disabled = true;
document.getElementById('debug-output-submit-progress').hidden = false;
@ -1534,7 +1517,7 @@ Zotero_Preferences.Debug_Output = {
ps.alert(
null,
Zotero.getString('general.error'),
'Invalid response from server'
Zotero.getString('general.invalidResponseServer')
);
return;
}
@ -1543,7 +1526,7 @@ Zotero_Preferences.Debug_Output = {
ps.alert(
null,
Zotero.getString('general.error'),
'The server returned an error. Please try again.'
Zotero.getString('general.serverError')
);
return;
}
@ -1551,9 +1534,8 @@ Zotero_Preferences.Debug_Output = {
var reportID = reported[0].getAttribute('reportID');
ps.alert(
null,
"Debug Output Submitted",
"Debug output has been sent to the Zotero server.\n\n"
+ "The Debug ID is D" + reportID + "."
Zotero.getString('zotero.preferences.advanced.debug.title'),
Zotero.getString('zotero.preferences.advanced.debug.sent', reportID)
);
}
@ -1571,10 +1553,8 @@ Zotero_Preferences.Debug_Output = {
if (Zotero.HTTP.browserIsOffline()) {
ps.alert(
null,
Zotero.getString(
'general.error',
Zotero.appName + " is in offline mode."
)
Zotero.getString('general.error'),
Zotero.getString('general.browserIsOffline', Zotero.appName)
);
return false;
}
@ -1626,7 +1606,7 @@ Zotero_Preferences.Debug_Output = {
ps.alert(
null,
Zotero.getString('general.error'),
"An error occurred sending debug output."
Zotero.getString('zotero.preferences.advanced.debug.error')
);
}
}

View file

@ -343,11 +343,8 @@ To add a new preference:
</tabpanel>
<tabpanel id="zotero-reset" orient="vertical">
<!-- TODO: localize -->
<!-- This doesn't wrap without an explicit width, for some reason -->
<description width="45em">The following operations are for use only in rare, specific situations and should not be used for general troubleshooting.
In many cases, resetting will cause additional problems.
See <label style="margin-left: 0; margin-right: 0" class="zotero-text-link" href="http://zotero.org/support/kb/sync_reset_options">Sync Reset Options</label> for more information.</description>
<description width="45em">&zotero.preferences.sync.reset.warning1;<label style="margin-left: 0; margin-right: 0" class="zotero-text-link" href="http://zotero.org/support/kb/sync_reset_options">&zotero.preferences.sync.reset.warning2;</label>&zotero.preferences.sync.reset.warning3;</description>
<radiogroup id="zotero-reset-sync-group" oncommand="handleSyncResetSelect(this)">
<groupbox>
@ -731,9 +728,8 @@ To add a new preference:
<tabbox id="zotero-prefpane-advanced-tabs">
<tabs>
<!-- TODO: localize -->
<tab label="General"/>
<tab label="Files and Folders"/>
<tab label="&zotero.preferences.prefpane.general;"/>
<tab label="&zotero.preferences.advanced.filesAndFolders;"/>
</tabs>
<tabpanels id="zotero-prefpane-advanced-tabpanels">

View file

@ -5,8 +5,7 @@
<!DOCTYPE window SYSTEM "chrome://zotero/locale/zotero.dtd">
<!-- TODO: localize -->
<wizard id="zotero-schema-upgrade" title="Zotero Upgrade Wizard"
<wizard id="zotero-schema-upgrade" title="&zotero.upgrade.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script>

View file

@ -161,7 +161,7 @@ Zotero.CollectionTreeView.prototype.refresh = function()
this._showRow(new Zotero.ItemGroup('separator', false));
var header = {
id: "group-libraries-header",
label: "Group Libraries", // TODO: localize
label: Zotero.getString('pane.collections.groupLibraries'),
expand: function (beforeRow, groups) {
if (!groups) {
var groups = Zotero.Groups.getAll();

View file

@ -462,58 +462,49 @@ Zotero.File = new function(){
}
// TODO: localize
this.checkFileAccessError = function (e, file, operation) {
if (file) {
var str = "The file '" + file.path + "' ";
var str = Zotero.getString('file.accessError.theFile', file.path);
}
else {
var str = "A file ";
var str = Zotero.getString('file.accessError.aFile');
}
switch (operation) {
case 'create':
var opWord = "created";
var opWord = Zotero.getString('file.accessError.created');
break;
case 'update':
var opWord = "updated";
var opWord = Zotero.getString('file.accessError.updated');
break;
case 'delete':
var opWord = "deleted";
var opWord = Zotero.getString('file.accessError.deleted');
break;
default:
var opWord = "updated";
var opWord = Zotero.getString('file.accessError.updated');
}
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' || e.name == 'NS_ERROR_FILE_IS_LOCKED'
// Shows up on some Windows systems
|| e.name == 'NS_ERROR_FAILURE') {
Zotero.debug(e);
// TODO: localize
str = str + "cannot be " + opWord + ".";
var checkFileWindows = "Check that the file is not currently "
+ "in use and that it is not marked as read-only. To check "
+ "all files in your Zotero data directory, right-click on "
+ "the 'zotero' directory, click Properties, clear "
+ "the Read-Only checkbox, and apply the change to all folders "
+ "and files in the directory.";
var checkFileOther = "Check that the file is not currently "
+ "in use and that its permissions allow write access.";
str = str + Zotero.getString('file.accessError.cannotBe') + opWord + ".";
var checkFileWindows = Zotero.getString('file.accessError.message.windows');
var checkFileOther = Zotero.getString('file.accessError.message.other');
var msg = str + " "
+ (Zotero.isWin ? checkFileWindows : checkFileOther)
+ "\n\n"
+ "Restarting your computer or disabling security "
+ "software may also help.";
+ Zotero.getString('file.accessError.restart');
if (operation == 'create') {
var e = new Zotero.Error(
msg,
0,
{
dialogButtonText: "Show Parent Directory",
dialogButtonText: Zotero.getString('file.accessError.showParentDir'),
dialogButtonCallback: function () {
try {
file.parent.QueryInterface(Components.interfaces.nsILocalFile).reveal();
@ -531,7 +522,7 @@ Zotero.File = new function(){
msg,
0,
{
dialogButtonText: "Show File",
dialogButtonText: Zotero.getString('locate.showFile.label'),
dialogButtonCallback: function () {
try {
file.QueryInterface(Components.interfaces.nsILocalFile);

View file

@ -53,9 +53,8 @@ Zotero.Sync.Storage = new function () {
this.ERROR_FILE_MISSING_AFTER_UPLOAD = -16;
// TEMP
// TODO: localize
this.__defineGetter__("defaultError", function () "A file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, restart " + Zotero.appName + " and/or your computer and try again. If you continue to receive the message, submit an error report and post the Report ID to a new thread in the Zotero Forums.");
this.__defineGetter__("defaultErrorRestart", function () "A file sync error occurred. Please restart " + Zotero.appName + " and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums.");
this.__defineGetter__("defaultError", function () Zotero.getString('sync.storage.error.default', Zotero.appName));
this.__defineGetter__("defaultErrorRestart", function () Zotero.getString('sync.storage.error.defaultRestart', Zotero.appName));
//
// Public properties
@ -1189,8 +1188,7 @@ Zotero.Sync.Storage = new function () {
// but log a warning and skip the file
else if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
Zotero.debug(e);
var msg = "Error creating file '" + destFile.leafName + "'\n\n"
+ "See http://www.zotero.org/support/kb/encrypted_filenames for more information.";
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
return;
}
@ -1394,9 +1392,7 @@ Zotero.Sync.Storage = new function () {
// can result in a lower limit -- not much we can do about this,
// but log a warning and skip the file
else if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
// TODO: localize
var msg = "Error creating file '" + destFile.leafName + "'. "
+ "See http://www.zotero.org/support/kb/encrypted_filenames for more information.";
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
continue;
}
@ -1460,9 +1456,7 @@ Zotero.Sync.Storage = new function () {
// See above
if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
Zotero.debug(e);
// TODO: localize
var msg = "Error creating file '" + destFile.leafName + "'. "
+ "See http://www.zotero.org/support/kb/encrypted_filenames for more information.";
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
continue;
}

View file

@ -25,11 +25,6 @@
Zotero.Sync.Storage.WebDAV = (function () {
// TEMP
// TODO: localize
var _defaultError = "A WebDAV file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.";
var _defaultErrorRestart = "A WebDAV file sync error occurred. Please restart " + Zotero.appName + " and try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.";
var _initialized = false;
var _parentURI;
var _rootURI;
@ -110,7 +105,7 @@ Zotero.Sync.Storage.WebDAV = (function () {
Components.utils.reportError(msg);
return deleteStorageFiles([item.key + ".prop"])
.then(function (results) {
throw new Error(_defaultError);
throw new Error(Zotero.Sync.Storage.WebDAV.defaultError);
});
}
@ -640,6 +635,14 @@ Zotero.Sync.Storage.WebDAV = (function () {
var obj = new Zotero.Sync.Storage.Mode;
obj.name = "WebDAV";
Object.defineProperty(obj, "defaultError", {
get: function () Zotero.getString('sync.storage.error.webdav.default')
});
Object.defineProperty(obj, "defaultErrorRestart", {
get: function () Zotero.getString('sync.storage.error.webdav.defaultRestart', Zotero.appName)
});
Object.defineProperty(obj, "includeUserFiles", {
get: function () {
return Zotero.Prefs.get("sync.storage.enabled") && Zotero.Prefs.get("sync.storage.protocol") == 'webdav';
@ -880,7 +883,7 @@ Zotero.Sync.Storage.WebDAV = (function () {
+ " in Zotero.Sync.Storage.WebDAV.downloadFile()";
Zotero.debug(msg, 1);
Components.utils.reportError(msg);
deferred.reject(_defaultError);
deferred.reject(Zotero.Sync.Storage.WebDAV.defaultError);
return;
}
@ -1030,7 +1033,7 @@ Zotero.Sync.Storage.WebDAV = (function () {
var msg = "Unexpected error code " + req.status + " uploading storage success file";
Zotero.debug(msg, 2);
Components.utils.reportError(msg);
throw _defaultError;
throw Zotero.Sync.Storage.WebDAV.defaultError;
});
};
@ -1054,7 +1057,7 @@ Zotero.Sync.Storage.WebDAV = (function () {
+ "for OPTIONS request caching WebDAV credentials";
Zotero.debug(msg, 1);
Components.utils.reportError(msg);
throw new Error(_defaultErrorRestart);
throw new Error(Zotero.Sync.Storage.WebDAV.defaultErrorRestart);
}
throw e;
});
@ -1409,23 +1412,15 @@ Zotero.Sync.Storage.WebDAV = (function () {
return false;
case Zotero.Sync.Storage.ERROR_FILE_MISSING_AFTER_UPLOAD:
// TODO: localize
var errorTitle = Zotero.getString("general.warning");
var errorMessage = "A potential problem was found with your WebDAV server.\n\n"
+ "An uploaded file was not immediately available for download. There may be a "
+ "short delay between when you upload files and when they become available, "
+ "particularly if you are using a cloud storage service.\n\n"
+ "If Zotero file syncing appears to work normally, "
+ "you can ignore this message. "
+ "If you have trouble, please post to the Zotero Forums.";
var errorMessage = Zotero.getString('sync.storage.error.webdav.fileMissingAfterUpload');
Zotero.Prefs.set("sync.storage.verified", true);
break;
case Zotero.Sync.Storage.ERROR_SERVER_ERROR:
// TODO: localize
var errorTitle = "WebDAV Server Configuration Error";
var errorMessage = "Your WebDAV server returned an internal error."
+ "\n\n" + Zotero.getString('sync.storage.error.checkFileSyncSettings');
var errorTitle = Zotero.getString('sync.storage.error.webdav.serverConfig.title');
var errorMessage = Zotero.getString('sync.storage.error.webdav.serverConfig')
+ Zotero.getString('sync.storage.error.checkFileSyncSettings');
break;
case Zotero.Sync.Storage.ERROR_UNKNOWN:

View file

@ -58,10 +58,7 @@ Zotero.Sync.Storage.ZFS = (function () {
catch (e) {
Zotero.debug("Response headers unavailable");
}
// TODO: localize?
var msg = "A file sync error occurred. Please restart " + Zotero.appName + " and/or your computer and try syncing again.\n\n"
+ "If the error persists, there may be a problem with either your computer or your network: security software, proxy server, VPN, etc. "
+ "Try disabling any security/firewall software you're using or, if this is a laptop, try from a different network.";
var msg = Zotero.getString('sync.storage.error.zfs.restart', Zotero.appName);
throw msg;
}
info.filename = req.getResponseHeader('X-Zotero-Filename');
@ -268,10 +265,8 @@ Zotero.Sync.Storage.ZFS = (function () {
var retry = e.xmlhttp.getResponseHeader('Retry-After');
if (retry) {
var minutes = Math.round(retry / 60);
// TODO: localize
var e = new Zotero.Error(
"You have too many queued uploads. "
+ "Please try again in " + minutes + " minutes.",
Zotero.getString('sync.storage.error.zfs.tooManyQueuedUploads', minutes),
"ZFS_UPLOAD_QUEUE_LIMIT"
);
throw e;
@ -301,11 +296,10 @@ Zotero.Sync.Storage.ZFS = (function () {
}
}
// TODO: localize
text += "\n\n" + filename + " (" + Math.round(file.fileSize / 1024) + "KB)";
var e = new Zotero.Error(
"The file '" + filename + "' would exceed your Zotero File Storage quota",
Zotero.getString('sync.storage.error.zfs.fileWouldExceedQuota', filename),
"ZFS_OVER_QUOTA",
{
dialogText: text,

View file

@ -538,7 +538,7 @@ Zotero.Sync.Runner = new function () {
if (Zotero.HTTP.browserIsOffline()){
this.clearSyncTimeout(); // DEBUG: necessary?
var msg = "Zotero cannot sync while " + Zotero.appName + " is in offline mode.";
var msg = "Zotero cannot sync because " + Zotero.getString('general.browserIsOffline', Zotero.appName);
var e = new Zotero.Error(msg, 0, { dialogButtonText: null })
Components.utils.reportError(e);
Zotero.debug(e, 1);
@ -1851,28 +1851,28 @@ Zotero.Sync.Server = new function () {
catch (e) {
Zotero.debug(e);
}
// TODO: localize
_error("SSL certificate error connecting to " + host
+ "\n\nSee http://zotero.org/support/kb/ssl_certificate_error for more information.",
var kbURL = 'http://zotero.org/support/kb/ssl_certificate_error';
_error(Zotero.getString('sync.storage.error.webdav.sslCertificateError', host) + "\n\n"
+ Zotero.getString('general.seeForMoreInformation', kbURL),
false, noReloadOnFailure);
}
else if ((secInfo.securityState & Ci.nsIWebProgressListener.STATE_IS_BROKEN) == Ci.nsIWebProgressListener.STATE_IS_BROKEN) {
_error("SSL connection error", false, noReloadOnFailure);
_error(Zotero.getString('sync.error.sslConnectionError'), false, noReloadOnFailure);
}
}
// TODO: localize
if (xmlhttp.status === 0) {
_error('Error connecting to server. Check your Internet connection.', false, noReloadOnFailure);
_error(Zotero.getString('sync.error.checkConnection'), false, noReloadOnFailure);
}
_error('Empty response from server. Please try again in a few minutes.', false, noReloadOnFailure);
_error(Zotero.getString('sync.error.emptyResponseServer') + Zotero.getString('general.tryAgainLater'),
false, noReloadOnFailure);
}
if (!xmlhttp.responseXML || !xmlhttp.responseXML.childNodes[0] ||
xmlhttp.responseXML.childNodes[0].tagName != 'response' ||
!xmlhttp.responseXML.childNodes[0].firstChild) {
Zotero.debug(xmlhttp.responseText);
// TODO: localize
_error('Invalid response from server. Please try again in a few minutes.', xmlhttp.responseText, noReloadOnFailure);
_error(Zotero.getString('general.invalidResponseServer') + Zotero.getString('general.tryAgainLater'),
xmlhttp.responseText, noReloadOnFailure);
}
var firstChild = xmlhttp.responseXML.firstChild.firstChild;
@ -2079,8 +2079,7 @@ Zotero.Sync.Server = new function () {
case 'INVALID_TIMESTAMP':
var validClock = Zotero.DB.valueQuery("SELECT CURRENT_TIMESTAMP BETWEEN '1970-01-01 00:00:01' AND '2038-01-19 03:14:07'");
if (!validClock) {
// TODO: localize
_error("The system clock is set to an invalid time. You will need to correct this to sync with the Zotero server.");
_error(Zotero.getString('sync.error.invalidClock'));
}
setTimeout(function () {
@ -2186,37 +2185,20 @@ Zotero.Sync.Server = new function () {
+ ps.BUTTON_POS_1_DEFAULT
+ ps.BUTTON_DELAY_ENABLE;
var msg = "This Zotero database was last synced with a different "
+ "zotero.org account ('" + lastUsername + "') from the "
+ "current one ('" + username + "'). ";
var msg = Zotero.getString('sync.lastSyncWithDifferentAccount', [lastUsername, username]);
if (!noServerData) {
// TODO: localize
msg += "If you continue, local Zotero data will be "
+ "combined with data from the '" + username + "' account "
+ "stored on the server.";
msg += " " + Zotero.getString('sync.localDataWillBeCombined', username);
// If there are local groups belonging to the previous user,
// we need to remove them
if (groups.length) {
msg += "Local groups, including any with changed items, will also "
+ "be removed.";
msg += " " + Zotero.getString('sync.localGroupsWillBeRemoved1');
}
msg += "\n\n"
+ "To avoid combining or losing data, revert to the '"
+ lastUsername + "' account or use the Reset options "
+ "in the Sync pane of the Zotero preferences.";
var syncButtonText = "Sync";
msg += "\n\n" + Zotero.getString('sync.avoidCombiningData', lastUsername);
var syncButtonText = Zotero.getString('sync.sync');
}
else if (groups.length) {
msg += "If you continue, local groups, including any with changed items, "
+ "will be removed and replaced with groups linked to the '"
+ username + "' account."
+ "\n\n"
+ "To avoid losing local changes to groups, be sure you "
+ "have synced with the '" + lastUsername + "' account before "
+ "syncing with the '" + username + "' account.";
msg += " " + Zotero.getString('sync.localGroupsWillBeRemoved2', [username, lastUsername]);
var syncButtonText = Zotero.getString('sync.removeGroupsAndSync');
}
// If there are no local groups and the server is empty,
@ -2335,9 +2317,8 @@ Zotero.Sync.Server = new function () {
// instead of creating its own dialog, but setSyncIcon() doesn't yet provide full control
// over dialog title and primary button text/action, which is why this version of the
// dialog is a bit uglier than the manual click version
// TODO: localize and combine with below
var msg = "The Zotero sync server did not accept your username and password.\n\n"
+ "Please check that you have entered your zotero.org login information correctly in the Zotero sync preferences.";
// TODO: localize (=>done) and combine with below (=>?)
var msg = Zotero.getString('sync.error.invalidLogin.text');
e.data = {};
e.data.dialogText = msg;
e.data.dialogButtonText = Zotero.getString('sync.openSyncPreferences');
@ -2358,15 +2339,13 @@ Zotero.Sync.Server = new function () {
.getService(Components.interfaces.nsIPromptService);
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
// TODO: localize
if (e.error == Zotero.Error.ERROR_SYNC_USERNAME_NOT_SET) {
var title = Zotero.getString('sync.error.usernameNotSet');
var msg = "You must enter your zotero.org username and password in the Zotero preferences to sync with the Zotero server."
var msg = Zotero.getString('sync.error.usernameNotSet.text');
}
else {
var title = Zotero.getString('sync.error.invalidLogin');
var msg = "The Zotero sync server did not accept your username and password.\n\n"
+ "Please check that you have entered your zotero.org login information correctly in the Zotero sync preferences.";
var msg = Zotero.getString('sync.error.invalidLogin.text');
}
var index = ps.confirmEx(
win,
@ -3219,10 +3198,9 @@ Zotero.Sync.Server.Data = new function() {
if (Zotero.Sync.Runner.background) {
Zotero.Sync.Server.manualSyncRequired = true;
// TODO: localize again
//Zotero.getString('sync.error.manualInterventionRequired')
//Zotero.getString('sync.error.clickSyncIcon')
var msg = "Conflicts have suspended automatic syncing.\n\nClick the sync icon to resolve them.";
var msg = Zotero.getString('sync.error.manualInterventionRequired')
+ "\n\n"
+ Zotero.getString('sync.error.clickSyncIcon');
var e = new Zotero.Error(msg, 0, { dialogButtonText: null });
throw (e);
}
@ -3708,20 +3686,17 @@ Zotero.Sync.Server.Data = new function() {
var remoteDelete = true;
}
// TODO: localize
var msg = "One or more locally deleted Zotero " + itemTypes + " have been "
+ "modified remotely since the last sync. ";
var msg = Zotero.getString('sync.conflict.autoChange.alert', itemTypes);
if (localDelete) {
msg += "The remote versions have been kept.";
msg += Zotero.getString('sync.conflict.remoteVersionsKept');
}
else if (remoteDelete) {
msg += "The local versions have been kept.";
msg += Zotero.getString('sync.conflict.localVersionsKept');
}
else {
msg += "The most recent versions have been kept.";
msg += Zotero.getString('sync.conflict.recentVersionsKept');
}
msg += "\n\nView the " + (Zotero.isStandalone ? "" : "Firefox ")
+ "Error Console for the full list of such changes.";
msg += Zotero.getString('sync.conflict.viewErrorConsole', (Zotero.isStandalone ? "" : "Firefox "));
return msg;
}
@ -3734,42 +3709,35 @@ Zotero.Sync.Server.Data = new function() {
*/
function _generateAutoChangeLogMessage(itemType, localName, remoteName, remoteMoreRecent) {
if (localName === null) {
// TODO: localize
localName = "[deleted]";
localName = Zotero.getString('sync.conflict.deleted');
var localDelete = true;
}
else if (remoteName === null) {
remoteName = "[deleted]";
remoteName = Zotero.getString('sync.conflict.deleted');
var remoteDelete = true;
}
// TODO: localize
var msg = "A Zotero " + itemType + " has changed both locally and "
+ "remotely since the last sync:";
msg += "\n\n";
msg += "Local version: " + localName + "\n";
msg += "Remote version: " + remoteName + "\n";
var msg = Zotero.getString('sync.conflict.autoChange.log', itemType);
msg += Zotero.getString('sync.conflict.localVersion', localName);
msg += Zotero.getString('sync.conflict.remoteVersion', remoteName);
msg += "\n";
if (localDelete) {
msg += "The remote version has been kept.";
msg += Zotero.getString('sync.conflict.remoteVersionKept');
}
else if (remoteDelete) {
msg += "The local version has been kept.";
msg += Zotero.getString('sync.conflict.localVersionKept');
}
else {
var moreRecent = remoteMoreRecent ? remoteName : localName;
msg += "The most recent version, '" + moreRecent + "', has been kept.";
msg += Zotero.getString('sync.conflict.recentVersionKept', moreRecent);
}
return msg;
}
function _generateCollectionItemMergeAlertMessage() {
// TODO: localize
var msg = "One or more Zotero items have been added to and/or removed "
+ "from the same collection on multiple computers since the last sync.\n\n"
+ "View the " + (Zotero.isStandalone ? "" : "Firefox ")
+ "Error Console for the full list of such changes.";
var msg = Zotero.getString('sync.conflict.collectionItemMerge.alert')
+ Zotero.getString('sync.conflict.viewErrorConsole', (Zotero.isStandalone ? "" : "Firefox "));
return msg;
}
@ -3779,11 +3747,7 @@ Zotero.Sync.Server.Data = new function() {
* @param {Integer[]} addedItemIDs
*/
function _generateCollectionItemMergeLogMessage(collectionName, addedItemIDs) {
// TODO: localize
var introMsg = "Zotero items in the collection '" + collectionName + "' have been "
+ "added and/or removed on multiple computers since the last sync. "
introMsg += "The following items have been added to the collection:";
var introMsg = Zotero.getString('sync.conflict.collectionItemMerge.log', collectionName);
var itemText = [];
var max = addedItemIDs.length;
for (var i=0; i<max; i++) {
@ -3807,12 +3771,8 @@ Zotero.Sync.Server.Data = new function() {
function _generateTagItemMergeAlertMessage() {
// TODO: localize
var msg = "One or more Zotero tags have been added to and/or removed from "
+ "items on multiple computers since the last sync. "
+ "The different sets of tags have been combined.\n\n"
+ "View the " + (Zotero.isStandalone ? "" : "Firefox ")
+ "Error Console for the full list of such changes.";
var msg = Zotero.getString('sync.conflict.tagItemMerge.alert')
+ Zotero.getString('sync.conflict.viewErrorConsole', (Zotero.isStandalone ? "" : "Firefox "));
return msg;
}
@ -3823,15 +3783,13 @@ Zotero.Sync.Server.Data = new function() {
* @param {Boolean} remoteIsTarget
*/
function _generateTagItemMergeLogMessage(tagName, addedItemIDs, remoteIsTarget) {
// TODO: localize
var introMsg = "The Zotero tag '" + tagName + "' has been added to and/or "
+ "removed from items on multiple computers since the last sync. "
var introMsg = Zotero.getString('sync.conflict.tagItemMerge.log', tagName);
if (remoteIsTarget) {
introMsg += "It has been added to the following remote items:";
introMsg += Zotero.getString('sync.conflict.tag.addedToRemote');
}
else {
introMsg += "It has been added to the following local items:";
introMsg += Zotero.getString('sync.conflict.tag.addedToLocal');
}
var itemText = [];
for each(var id in addedItemIDs) {
@ -3996,9 +3954,7 @@ Zotero.Sync.Server.Data = new function() {
var path = item.attachment.path;
if (path != _xmlize(path)) {
var filename = item.attachment.path.substr(8);
// TODO: localize
var msg = "The filename '" + filename + "' contains invalid characters.\n\nRename the file and try again. "
+ "If you rename the file via the OS, you will need to relink it in Zotero.";
var msg = Zotero.getString('sync.error.invalidCharsFilename', filename);
var e = new Zotero.Error(msg, 0, { dialogButtonText: null });
throw (e);

View file

@ -556,16 +556,6 @@ Components.utils.import("resource://gre/modules/Services.jsm");
var dir = Zotero.getProfileDirectory();
dir.append('zotero');
var zs = Zotero.getString('app.standalone');
var zf = Zotero.getString('app.firefox');
// TODO: localize
var msg = "The currently selected data directory is not compatible "
+ "with " + zs + ", which can share a database only with "
+ zf + " 2.1b3 or later."
+ "\n\n"
+ "Upgrade to the latest version of " + zf + " first or select a "
+ "different data directory for use with " + zs + ".";
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.createInstance(Components.interfaces.nsIPromptService);
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
@ -574,13 +564,12 @@ Components.utils.import("resource://gre/modules/Services.jsm");
+ ps.BUTTON_POS_2_DEFAULT;
var index = ps.confirmEx(
null,
// TODO: localize
"Incompatible Database Version",
msg,
Zotero.getString('dataDir.incompatibleDbVersion.title'),
Zotero.getString('dataDir.incompatibleDbVersion.text'),
buttonFlags,
"Use Default",
Zotero.getString('general.useDefault'),
Zotero.getString('dataDir.standaloneMigration.selectCustom'),
"Quit",
Zotero.getString('general.quit'),
null,
{}
);
@ -1081,13 +1070,8 @@ Components.utils.import("resource://gre/modules/Services.jsm");
else {
var buttonFlags = ps.STD_YES_NO_BUTTONS;
var index = ps.confirmEx(null,
//Zotero.getString('dataDir.selectedDirEmpty.title'),
//Zotero.getString('dataDir.selectedDirEmpty.text'),
'Directory Empty',
'The directory you selected is empty. To move an existing Zotero data directory, '
+ 'you will need to manually copy files from the existing data directory to the new location. '
+ 'See http://zotero.org/support/zotero_data for more information.\n\nUse the new directory?',
Zotero.getString('dataDir.selectedDirEmpty.title'),
Zotero.getString('dataDir.selectedDirEmpty.text'),
buttonFlags, null, null, null, null, {});
// Not OK -- return to file picker
@ -1735,15 +1719,15 @@ Components.utils.import("resource://gre/modules/Services.jsm");
var modes = {
titleCreatorYear: {
label: "Title, Creator, Year"
label: Zotero.getString('quickSearch.mode.titleCreatorYear')
},
fields: {
label: "All Fields & Tags"
label: Zotero.getString('quickSearch.mode.fieldsAndTags')
},
everything: {
label: "Everything"
label: Zotero.getString('quickSearch.mode.everything')
}
};

View file

@ -1275,8 +1275,7 @@ var ZoteroPane = new function()
if (itemGroup.isDuplicates()) {
if (!itemGroup.editable) {
if (count) {
// TODO: localize
var msg = "Library write access is required to merge items.";
var msg = Zotero.getString('pane.item.duplicates.writeAccessRequired');
}
else {
var msg = Zotero.getString('pane.item.selected.zero');
@ -1302,7 +1301,7 @@ var ZoteroPane = new function()
Zotero_Duplicates_Pane.setItems(this.getSelectedItems(), displayNumItemsOnTypeError);
}
else {
var msg = Zotero.getString('pane.item.selectToMerge');
var msg = Zotero.getString('pane.item.duplicates.selectToMerge');
this.setItemPaneMessage(msg);
}
}
@ -1415,12 +1414,10 @@ var ZoteroPane = new function()
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
var index = ps.confirmEx(
null,
// TODO: localize
"PDF Tools Not Installed",
"To use this feature, you must first install the PDF tools in "
+ "the Zotero preferences.",
Zotero.getString('pane.item.attachments.PDF.installTools.title'),
Zotero.getString('pane.item.attachments.PDF.installTools.text'),
buttonFlags,
"Open Preferences",
Zotero.getString('general.openPreferences'),
null, null, null, {}
);
if (index == 0) {
@ -2943,9 +2940,9 @@ var ZoteroPane = new function()
var input = {};
var check = {value : false};
// TODO: Localize
// TODO: Allow title to be specified?
var result = ps.prompt(null, "Attach Link to URI", "Enter a URI:", input, "", {});
var result = ps.prompt(null, Zotero.getString('pane.items.attach.link.uri.title'),
Zotero.getString('pane.items.attach.link.uri'), input, "", {});
if (!result || !input.value) return false;
// Create a new attachment

View file

@ -10,3 +10,4 @@
<!ENTITY zotero.thanks "Special Thanks:">
<!ENTITY zotero.about.close "Close">
<!ENTITY zotero.moreCreditsAndAcknowledgements "More Credits &amp; Acknowledgements">
<!ENTITY zotero.citationProcessing "Citation &amp; Bibliography Processing">

View file

@ -65,6 +65,9 @@
<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "as needed">
<!ENTITY zotero.preferences.sync.fileSyncing.tos1 "By using Zotero storage, you agree to become bound by its">
<!ENTITY zotero.preferences.sync.fileSyncing.tos2 "terms and conditions">
<!ENTITY zotero.preferences.sync.reset.warning1 "The following operations are for use only in rare, specific situations and should not be used for general troubleshooting. In many cases, resetting will cause additional problems. See ">
<!ENTITY zotero.preferences.sync.reset.warning2 "Sync Reset Options">
<!ENTITY zotero.preferences.sync.reset.warning3 " for more information.">
<!ENTITY zotero.preferences.sync.reset.fullSync "Full Sync with Zotero Server">
<!ENTITY zotero.preferences.sync.reset.fullSync.desc "Merge local Zotero data with data from the sync server, ignoring sync history.">
<!ENTITY zotero.preferences.sync.reset.restoreFromServer "Restore from Zotero Server">
@ -159,6 +162,7 @@
<!ENTITY zotero.preferences.proxies.a_variable "&#37;a - Any string">
<!ENTITY zotero.preferences.prefpane.advanced "Advanced">
<!ENTITY zotero.preferences.advanced.filesAndFolders "Files and Folders">
<!ENTITY zotero.preferences.prefpane.locate "Locate">
<!ENTITY zotero.preferences.locate.locateEngineManager "Article Lookup Engine Manager">

View file

@ -5,6 +5,7 @@
<!ENTITY zotero.general.edit "Edit">
<!ENTITY zotero.general.delete "Delete">
<!ENTITY zotero.errorReport.title "Zotero Error Report">
<!ENTITY zotero.errorReport.unrelatedMessages "The error log may include messages unrelated to Zotero.">
<!ENTITY zotero.errorReport.submissionInProgress "Please wait while the error report is submitted.">
<!ENTITY zotero.errorReport.submitted "Your error report has been submitted.">
@ -12,6 +13,7 @@
<!ENTITY zotero.errorReport.postToForums "Please post a message to the Zotero forums (forums.zotero.org) with this Report ID, a description of the problem, and any steps necessary to reproduce it.">
<!ENTITY zotero.errorReport.notReviewed "Error reports are not reviewed unless referred to in the forums.">
<!ENTITY zotero.upgrade.title "Zotero Upgrade Wizard">
<!ENTITY zotero.upgrade.newVersionInstalled "You have installed a new version of Zotero.">
<!ENTITY zotero.upgrade.upgradeRequired "Your Zotero database must be upgraded to work with the new version.">
<!ENTITY zotero.upgrade.autoBackup "Your existing database will be backed up automatically before any changes are made.">
@ -231,6 +233,10 @@
<!ENTITY zotero.sync.longTagFixer.uncheckedTagsNotSaved "Unchecked tags will not be saved.">
<!ENTITY zotero.sync.longTagFixer.tagWillBeDeleted "The tag will be deleted from all items.">
<!ENTITY zotero.merge.title "Conflict Resolution">
<!ENTITY zotero.merge.of "of">
<!ENTITY zotero.merge.deleted "Deleted">
<!ENTITY zotero.proxy.recognized.title "Proxy Recognized">
<!ENTITY zotero.proxy.recognized.warning "Only add proxies linked from your library, school, or corporate website">
<!ENTITY zotero.proxy.recognized.warning.secondary "Adding other proxies allows malicious sites to masquerade as sites you trust.">

View file

@ -14,6 +14,9 @@ general.restartLater = Restart later
general.restartApp = Restart %S
general.errorHasOccurred = An error has occurred.
general.unknownErrorOccurred = An unknown error occurred.
general.invalidResponseServer = Invalid response from server.
general.tryAgainLater = Please try again in a few minutes.
general.serverError = The server returned an error. Please try again.
general.restartFirefox = Please restart %S.
general.restartFirefoxAndTryAgain = Please restart %S and try again.
general.checkForUpdate = Check for update
@ -35,8 +38,12 @@ general.seeForMoreInformation = See %S for more information.
general.enable = Enable
general.disable = Disable
general.remove = Remove
general.reset = Reset
general.quit = Quit
general.useDefault = Use Default
general.openDocumentation = Open Documentation
general.numMore = %S more…
general.openPreferences = Open Preferences
general.operationInProgress = A Zotero operation is currently in progress.
general.operationInProgress.waitUntilFinished = Please wait until it has finished.
@ -68,6 +75,10 @@ errorReport.advanceMessage = Press %S to send an error report to the Zotero de
errorReport.stepsToReproduce = Steps to Reproduce:
errorReport.expectedResult = Expected result:
errorReport.actualResult = Actual result:
errorReport.noNetworkConnection = No network connection
errorReport.invalidResponseRepository = Invalid response from repository
errorReport.repoCannotBeContacted = Repository cannot be contacted
attachmentBasePath.selectDir = Choose Base Directory
attachmentBasePath.chooseNewPath.title = Confirm New Base Directory
@ -87,6 +98,10 @@ dataDir.useProfileDir = Use %S profile directory
dataDir.selectDir = Select a Zotero data directory
dataDir.selectedDirNonEmpty.title = Directory Not Empty
dataDir.selectedDirNonEmpty.text = The directory you selected is not empty and does not appear to be a Zotero data directory.\n\nCreate Zotero files in this directory anyway?
dataDir.selectedDirEmpty.title = Directory Empty
dataDir.selectedDirEmpty.text = The directory you selected is empty. To move an existing Zotero data directory, you will need to manually copy files from the existing data directory to the new location. See http://zotero.org/support/zotero_data for more information.\n\nUse the new directory?
dataDir.incompatibleDbVersion.title = Incompatible Database Version
dataDir.incompatibleDbVersion.text = The currently selected data directory is not compatible with Zotero Standalone, which can share a database only with Zotero for Firefox 2.1b3 or later.\n\nUpgrade to the latest version of Zotero for Firefox first or select a different data directory for use with Zotero Standalone.
dataDir.standaloneMigration.title = Existing Zotero Library Found
dataDir.standaloneMigration.description = This appears to be your first time using %1$S. Would you like %1$S to import settings from %2$S and use your existing data directory?
dataDir.standaloneMigration.multipleProfiles = %1$S will share its data directory with the most recently used profile.
@ -126,6 +141,7 @@ pane.collections.newSavedSeach = New Saved Search
pane.collections.savedSearchName = Enter a name for this saved search:
pane.collections.rename = Rename collection:
pane.collections.library = My Library
pane.collections.groupLibraries = Group Libraries
pane.collections.trash = Trash
pane.collections.untitled = Untitled
pane.collections.unfiled = Unfiled Items
@ -156,6 +172,8 @@ tagColorChooser.numberKeyInstructions = You can add this tag to selecte
tagColorChooser.maxTags = Up to %S tags in each library can have colors assigned.
pane.items.loading = Loading items list…
pane.items.attach.link.uri.title = Attach Link to URI
pane.items.attach.link.uri = Enter a URI:
pane.items.trash.title = Move to Trash
pane.items.trash = Are you sure you want to move the selected item to the Trash?
pane.items.trash.multiple = Are you sure you want to move the selected items to the Trash?
@ -195,7 +213,12 @@ pane.item.selected.multiple = %S items selected
pane.item.unselected.zero = No items in this view
pane.item.unselected.singular = %S item in this view
pane.item.unselected.plural = %S items in this view
pane.item.selectToMerge = Select items to merge
pane.item.duplicates.selectToMerge = Select items to merge
pane.item.duplicates.mergeItems = Merge %S items
pane.item.duplicates.writeAccessRequired = Library write access is required to merge items.
pane.item.duplicates.onlyTopLevel = Only top-level full items can be merged.
pane.item.duplicates.onlySameItemType = Merged items must all be of the same item type.
pane.item.changeType.title = Change Item Type
pane.item.changeType.text = Are you sure you want to change the item type?\n\nThe following fields will be lost:
@ -221,14 +244,15 @@ pane.item.attachments.count.zero = %S attachments:
pane.item.attachments.count.singular = %S attachment:
pane.item.attachments.count.plural = %S attachments:
pane.item.attachments.select = Select a File
pane.item.attachments.PDF.installTools.title = PDF Tools Not Installed
pane.item.attachments.PDF.installTools.text = To use this feature, you must first install the PDF tools in the Zotero preferences.
pane.item.attachments.filename = Filename
pane.item.noteEditor.clickHere = click here
pane.item.tags = Tags:
pane.item.tags.count.zero = %S tags:
pane.item.tags.count.singular = %S tag:
pane.item.tags.count.plural = %S tags:
pane.item.tags.icon.user = User-added tag
pane.item.tags.icon.automatic = Automatically added tag
pane.item.related = Related:
pane.item.related.count.zero = %S related:
pane.item.related.count.singular = %S related:
pane.item.related.count.plural = %S related:
@ -473,6 +497,19 @@ zotero.preferences.launchNonNativeFiles = Open PDFs and other
zotero.preferences.openurl.resolversFound.zero = %S resolvers found
zotero.preferences.openurl.resolversFound.singular = %S resolver found
zotero.preferences.openurl.resolversFound.plural = %S resolvers found
zotero.preferences.sync.purgeStorage.title = Purge Attachment Files on Zotero Servers?
zotero.preferences.sync.purgeStorage.desc = If you plan to use WebDAV for file syncing and you previously synced attachment files in My Library to the Zotero servers, you can purge those files from the Zotero servers to give you more storage space for groups.\n\nYou can purge files at any time from your account settings on zotero.org.
zotero.preferences.sync.purgeStorage.confirmButton = Purge Files Now
zotero.preferences.sync.purgeStorage.cancelButton = Do Not Purge
zotero.preferences.sync.reset.userInfoMissing = You must enter a username and password in the %S tab before using the reset options.
zotero.preferences.sync.reset.restoreFromServer = All data in this copy of Zotero will be erased and replaced with data belonging to user '%S' on the Zotero server.
zotero.preferences.sync.reset.replaceLocalData = Replace Local Data
zotero.preferences.sync.reset.restartToComplete = Firefox must be restarted to complete the restore process.
zotero.preferences.sync.reset.restoreToServer = All data belonging to user '%S' on the Zotero server will be erased and replaced with data from this copy of Zotero.\n\nDepending on the size of your library, there may be a delay before your data is available on the server.
zotero.preferences.sync.reset.replaceServerData = Replace Server Data
zotero.preferences.sync.reset.fileSyncHistory = All file sync history will be cleared.\n\nAny local attachment files that do not exist on the storage server will be uploaded on the next sync.
zotero.preferences.search.rebuildIndex = Rebuild Index
zotero.preferences.search.rebuildWarning = Do you want to rebuild the entire index? This may take a while.\n\nTo index only items that haven't been indexed, use %S.
zotero.preferences.search.clearIndex = Clear Index
@ -509,6 +546,10 @@ zotero.preferences.advanced.resetTranslators.changesLost = Any new or modifie
zotero.preferences.advanced.resetStyles = Reset Styles
zotero.preferences.advanced.resetStyles.changesLost = Any new or modified styles will be lost.
zotero.preferences.advanced.debug.title = Debug Output Submitted
zotero.preferences.advanced.debug.sent = Debug output has been sent to the Zotero server.\n\nThe Debug ID is D%S.
zotero.preferences.advanced.debug.error = An error occurred sending debug output.
dragAndDrop.existingFiles = The following files already existed in the destination directory and were not copied:
dragAndDrop.filesNotFound = The following files were not found and could not be copied:
@ -518,7 +559,8 @@ fileInterface.import = Import
fileInterface.export = Export
fileInterface.exportedItems = Exported Items
fileInterface.imported = Imported
fileInterface.fileFormatUnsupported = No translator could be found for the given file.
fileInterface.unsupportedFormat = The selected file is not in a supported format.
fileInterface.viewSupportedFormats = View Supported Formats…
fileInterface.untitledBibliography = Untitled Bibliography
fileInterface.bibliographyHTMLTitle = Bibliography
fileInterface.importError = An error occurred while trying to import the selected file. Please ensure that the file is valid and try again.
@ -527,6 +569,10 @@ fileInterface.noReferencesError = The items you have selected contain no referen
fileInterface.bibliographyGenerationError = An error occurred generating your bibliography. Please try again.
fileInterface.exportError = An error occurred while trying to export the selected file.
quickSearch.mode.titleCreatorYear = Title, Creator, Year
quickSearch.mode.fieldsAndTags = All Fields & Tags
quickSearch.mode.everything = Everything
advancedSearchMode = Advanced search mode — press Enter to search.
searchInProgress = Search in progress — please wait.
@ -677,6 +723,7 @@ styles.abbreviations.title = Load Abbreviations
styles.abbreviations.parseError = The abbreviations file "%1$S" is not valid JSON.
styles.abbreviations.missingInfo = The abbreviations file "%1$S" does not specify a complete info block.
sync.sync = Sync
sync.cancel = Cancel Sync
sync.openSyncPreferences = Open Sync Preferences
sync.resetGroupAndSync = Reset Group and Sync
@ -686,8 +733,10 @@ sync.remoteObject = Remote Object
sync.mergedObject = Merged Object
sync.error.usernameNotSet = Username not set
sync.error.usernameNotSet.text = You must enter your zotero.org username and password in the Zotero preferences to sync with the Zotero server.
sync.error.passwordNotSet = Password not set
sync.error.invalidLogin = Invalid username or password
sync.error.invalidLogin.text = The Zotero sync server did not accept your username and password.\n\nPlease check that you have entered your zotero.org login information correctly in the Zotero sync preferences.
sync.error.enterPassword = Please enter a password.
sync.error.loginManagerCorrupted1 = Zotero cannot access your login information, likely due to a corrupted %S login manager database.
sync.error.loginManagerCorrupted2 = Close %1$S, back up and delete signons.* from your %2$S profile, and re-enter your Zotero login information in the Sync pane of the Zotero preferences.
@ -696,8 +745,43 @@ sync.error.syncInProgress.wait = Wait for the previous sync to complete or rest
sync.error.writeAccessLost = You no longer have write access to the Zotero group '%S', and files you've added or edited cannot be synced to the server.
sync.error.groupWillBeReset = If you continue, your copy of the group will be reset to its state on the server, and local modifications to items and files will be lost.
sync.error.copyChangedItems = If you would like a chance to copy your changes elsewhere or to request write access from a group administrator, cancel the sync now.
sync.error.manualInterventionRequired = An automatic sync resulted in a conflict that requires manual intervention.
sync.error.clickSyncIcon = Click the sync icon to sync manually.
sync.error.manualInterventionRequired = Conflicts have suspended automatic syncing.
sync.error.clickSyncIcon = Click the sync icon to resolve them.
sync.error.invalidClock = The system clock is set to an invalid time. You will need to correct this to sync with the Zotero server.
sync.error.sslConnectionError = SSL connection error
sync.error.checkConnection = Error connecting to server. Check your Internet connection.
sync.error.emptyResponseServer = Empty response from server.
sync.error.invalidCharsFilename = The filename '%S' contains invalid characters.\n\nRename the file and try again. If you rename the file via the OS, you will need to relink it in Zotero.
sync.lastSyncWithDifferentAccount = This Zotero database was last synced with a different zotero.org account ('%1$S') from the current one ('%2$S').
sync.localDataWillBeCombined = If you continue, local Zotero data will be combined with data from the '%S' account stored on the server.
sync.localGroupsWillBeRemoved1 = Local groups, including any with changed items, will also be removed.
sync.avoidCombiningData = To avoid combining or losing data, revert to the '%S' account or use the Reset options in the Sync pane of the Zotero preferences.
sync.localGroupsWillBeRemoved2 = If you continue, local groups, including any with changed items, will be removed and replaced with groups linked to the '%1$S' account.\n\nTo avoid losing local changes to groups, be sure you have synced with the '%2$S' account before syncing with the '%1$S' account.
sync.conflict.autoChange.alert = One or more locally deleted Zotero %S have been modified remotely since the last sync.\u0020
sync.conflict.autoChange.log = A Zotero %S has changed both locally and remotely since the last sync:\n\n
sync.conflict.remoteVersionsKept = The remote versions have been kept.
sync.conflict.remoteVersionKept = The remote version has been kept.
sync.conflict.localVersionsKept = The local versions have been kept.
sync.conflict.localVersionKept = The local version has been kept.
sync.conflict.recentVersionsKept = The most recent versions have been kept.
sync.conflict.recentVersionKept = The most recent version, '%S', has been kept.
sync.conflict.viewErrorConsole = \n\nView the %S Error Console for the full list of such changes.
sync.conflict.localVersion = Local version: %S\n
sync.conflict.remoteVersion = Remote version: %S\n
sync.conflict.deleted = [deleted]
sync.conflict.collectionItemMerge.alert = One or more Zotero items have been added to and/or removed from the same collection on multiple computers since the last sync.
sync.conflict.collectionItemMerge.log = Zotero items in the collection '%S' have been added and/or removed on multiple computers since the last sync. The following items have been added to the collection:
sync.conflict.tagItemMerge.alert = One or more Zotero tags have been added to and/or removed from items on multiple computers since the last sync. The different sets of tags have been combined.
sync.conflict.tagItemMerge.log = The Zotero tag '%S' has been added to and/or removed from items on multiple computers since the last sync.\u0020
sync.conflict.tag.addedToRemote = It has been added to the following remote items:
sync.conflict.tag.addedToLocal = It has been added to the following local items:
sync.conflict.fileChanged = The following file has been changed in multiple locations.
sync.conflict.itemChanged = The following item has been changed in multiple locations.
sync.conflict.chooseVersionToKeep = \u0020Choose the version you would like to keep, and then click %S.
sync.conflict.chooseThisVersion = Choose this version
sync.status.notYetSynced = Not yet synced
sync.status.lastSync = Last sync:
@ -721,17 +805,23 @@ sync.storage.serverConfigurationVerified = Server configuration verified
sync.storage.fileSyncSetUp = File sync is successfully set up.
sync.storage.openAccountSettings = Open Account Settings
sync.storage.error.default = A file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, restart %S and/or your computer and try again. If you continue to receive the message, submit an error report and post the Report ID to a new thread in the Zotero Forums.
sync.storage.error.defaultRestart = A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums.
sync.storage.error.serverCouldNotBeReached = The server %S could not be reached.
sync.storage.error.permissionDeniedAtAddress = You do not have permission to create a Zotero directory at the following address:
sync.storage.error.checkFileSyncSettings = Please check your file sync settings or contact your server administrator.
sync.storage.error.verificationFailed = %S verification failed. Verify your file sync settings in the Sync pane of the Zotero preferences.
sync.storage.error.fileNotCreated = The file '%S' could not be created in the Zotero 'storage' directory.
sync.storage.error.encryptedFilenames = Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information.
sync.storage.error.fileEditingAccessLost = You no longer have file editing access to the Zotero group '%S', and files you've added or edited cannot be synced to the server.
sync.storage.error.copyChangedItems = If you would like a chance to copy changed items and files elsewhere, cancel the sync now.
sync.storage.error.fileUploadFailed = File upload failed.
sync.storage.error.directoryNotFound = Directory not found
sync.storage.error.doesNotExist = %S does not exist.
sync.storage.error.createNow = Do you want to create it now?
sync.storage.error.webdav.default = A WebDAV file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.
sync.storage.error.webdav.defaultRestart = A WebDAV file sync error occurred. Please restart %S and try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.
sync.storage.error.webdav.enterURL = Please enter a WebDAV URL.
sync.storage.error.webdav.invalidURL = %S is not a valid WebDAV URL.
sync.storage.error.webdav.invalidLogin = The WebDAV server did not accept the username and password you entered.
@ -742,10 +832,17 @@ sync.storage.error.webdav.sslConnectionError = SSL connection error connecting t
sync.storage.error.webdav.loadURLForMoreInfo = Load your WebDAV URL in the browser for more information.
sync.storage.error.webdav.seeCertOverrideDocumentation = See the certificate override documentation for more information.
sync.storage.error.webdav.loadURL = Load WebDAV URL
sync.storage.error.webdav.fileMissingAfterUpload = A potential problem was found with your WebDAV server.\n\nAn uploaded file was not immediately available for download. There may be a short delay between when you upload files and when they become available, particularly if you are using a cloud storage service.\n\nIf Zotero file syncing appears to work normally, you can ignore this message. If you have trouble, please post to the Zotero Forums.
sync.storage.error.webdav.serverConfig.title = WebDAV Server Configuration Error
sync.storage.error.webdav.serverConfig = Your WebDAV server returned an internal error.\n\n
sync.storage.error.zfs.restart = A file sync error occurred. Please restart %S and/or your computer and try syncing again.\n\nIf the error persists, there may be a problem with either your computer or your network: security software, proxy server, VPN, etc. Try disabling any security/firewall software you're using or, if this is a laptop, try from a different network.
sync.storage.error.zfs.tooManyQueuedUploads = You have too many queued uploads. Please try again in %S minutes.
sync.storage.error.zfs.personalQuotaReached1 = You have reached your Zotero File Storage quota. Some files were not uploaded. Other Zotero data will continue to sync to the server.
sync.storage.error.zfs.personalQuotaReached2 = See your zotero.org account settings for additional storage options.
sync.storage.error.zfs.groupQuotaReached1 = The group '%S' has reached its Zotero File Storage quota. Some files were not uploaded. Other Zotero data will continue to sync to the server.
sync.storage.error.zfs.groupQuotaReached2 = The group owner can increase the group's storage capacity from the storage settings section on zotero.org.
sync.storage.error.zfs.fileWouldExceedQuota = The file '%S' would exceed your Zotero File Storage quota
sync.longTagFixer.saveTag = Save Tag
sync.longTagFixer.saveTags = Save Tags
@ -783,6 +880,18 @@ rtfScan.rtf = Rich Text Format (.rtf)
rtfScan.saveTitle = Select a location in which to save the formatted file
rtfScan.scannedFileSuffix = (Scanned)
file.accessError.theFile = The file '%S'
file.accessError.aFile = A file
file.accessError.cannotBe = \u0020cannot be\u0020
file.accessError.created = created
file.accessError.updated = updated
file.accessError.deleted = deleted
file.accessError.message.windows = Check that the file is not currently in use and that it is not marked as read-only. To check all files in your Zotero data directory, right-click on the 'zotero' directory, click Properties, clear the Read-Only checkbox, and apply the change to all folders and files in the directory.
file.accessError.message.other = Check that the file is not currently in use and that its permissions allow write access.
file.accessError.restart = Restarting your computer or disabling security software may also help.
file.accessError.showParentDir = Show Parent Directory
lookup.failure.title = Lookup Failed
lookup.failure.description = Zotero could not find a record for the specified identifier. Please verify the identifier and try again.