Merge branch 'master' into api_syncing

Note that this loses conflicting changes to translate_item.js from 849803473a,
so those will need to be reapplied if applicable. /cc @aurimasv, @mtd91429
This commit is contained in:
Dan Stillman 2015-03-16 15:17:45 -04:00
commit a03772cae7
172 changed files with 3402 additions and 2540 deletions

View file

@ -47,6 +47,54 @@
padding: 5px 1px 5px 11px;
}
/*
* The searchbox focus ring is incorrect in Yosemite pre-Fx34, so use the old searchbox shape
* (with code borrowed from the Fx Add-ons window and icons borrowed from the Fx searchbar).
* These styles, the 'oldsearchfield' assignment in zoteroPane.js, and the Search.png icons
* can be removed after Fx31 ESR.
*
* Note: This uses navigator.oscpu in zoteroPane.js to test for Yosemite instead of
* -moz-mac-yosemite-theme here because the latter isn't defined in Fx31.
*/
#zotero-pane-stack[oldsearchfield] textbox[type=search] {
margin: 0;
-moz-appearance: none;
padding: 3px 5px 2px;
border: 1px solid rgba(60,73,97,0.5);
border-radius: 10000px;
box-shadow: inset 0 1px 1px rgba(0,0,0,0.15), 0 1px rgba(255,255,255,0.25);
background-clip: padding-box;
}
#zotero-pane-stack[oldsearchfield] textbox[type=search][focused] {
box-shadow: 0 0 1px -moz-mac-focusring inset, 0 0 4px 1px -moz-mac-focusring, 0 0 1.5px 1px -moz-mac-focusring, inset 0 1px 1px rgba(0,0,0,0.15);
border-color: -moz-mac-focusring;
}
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box {
-moz-padding-start: 15px;
background: url("chrome://zotero/skin/mac/moz/Search.png") left no-repeat;
background-size: 14px;
}
@media (min-resolution: 2dppx) {
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box {
background: url("chrome://zotero/skin/mac/moz/Search@2x.png") left no-repeat;
background-size: 14px;
}
}
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box:-moz-locale-dir(rtl) {
background-position: right;
}
#zotero-pane-stack[oldsearchfield] textbox[type=search] > .textbox-input-box > html|*.textbox-input::-moz-placeholder {
opacity: 1.0;
}
/* End searchbox focus fix */
#zotero-tb-search-menu-button
{
margin: -6px -2px -6px -16px;
@ -207,7 +255,7 @@
background-color: #8b8b8b !important;
}
#zotero-collections-splitter[state=collapsed]
#zotero-collections-splitter[state=collapsed], #zotero-items-splitter[state=collapsed]
{
border-right: 1px;
border-color: #A5A5A5;
@ -219,7 +267,7 @@
padding: 0;
}
#zotero-collections-splitter[state=collapsed] > grippy
#zotero-collections-splitter[state=collapsed] > grippy, #zotero-items-splitter[state=collapsed] > grippy
{
-moz-appearance: none;
background-image: url("chrome://zotero/skin/mac/vgrippy.png");
@ -249,7 +297,7 @@
height: 8px;
}
#zotero-tags-splitter > grippy:hover, #zotero-collections-splitter > grippy:hover
#zotero-tags-splitter > grippy:hover, #zotero-collections-splitter > grippy:hover, #zotero-items-splitter > grippy:hover
{
background-color:transparent;
}

View file

@ -34,6 +34,7 @@ var ZoteroAdvancedSearch = new function() {
this.itemsView = false;
var _searchBox;
var _libraryID;
function onLoad() {
_searchBox = document.getElementById('zotero-search-box');
@ -145,6 +146,7 @@ var ZoteroAdvancedSearch = new function() {
this.onLibraryChange = function (libraryID) {
_libraryID = libraryID;
document.getElementById('zotero-search-save').disabled = !Zotero.Libraries.isEditable(libraryID);
}

View file

@ -0,0 +1,60 @@
/*
***** BEGIN LICENSE BLOCK *****
Copyright © 2014 Center for History and New Media
George Mason University, Fairfax, Virginia, USA
http://zotero.org
This file is part of Zotero.
Zotero is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Zotero is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Zotero. If not, see <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/
var Zotero_AttachLink = new function() {
function getAttachFileLabel() {
return window.opener.document
.getElementById('zotero-tb-attachment-add-file-link')
.label;
};
this.submit = function() {
var link = document.getElementById('zotero-attach-uri-input').value;
var message = document.getElementById('zotero-attach-uri-message');
var cleanURI = Zotero.Attachments.cleanAttachmentURI(link, true);
if (!cleanURI) {
message.textContent = Zotero.getString('pane.items.attach.link.uri.unrecognized');
window.sizeToContent();
document.getElementById('zotero-attach-uri-input').select();
return false;
}
// Don't allow "file:" links, because using "Attach link to file" is the right way
else if (cleanURI.toLowerCase().indexOf('file:') == 0) {
message.textContent = Zotero.getString('pane.items.attach.link.uri.file',
[getAttachFileLabel()]);
window.sizeToContent();
document.getElementById('zotero-attach-uri-input').select();
return false;
}
else {
window.arguments[0].out = {
link: cleanURI,
title: document.getElementById('zotero-attach-uri-title').value
};
return true;
}
};
}

View file

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://zotero/skin/zotero.css" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://zotero/locale/zotero.dtd">
<dialog
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
buttons="accept,cancel"
ondialogaccept="return Zotero_AttachLink.submit();"
id="zotero-attach-uri-dialog"
title="&zotero.attachLink.title;"
>
<script src="include.js"/>
<script src="AttachLink.js"/>
<vbox id="zotero-attach-uri-container">
<hbox>
<description id="zotero-attach-uri-message" class="zotero-message-error"></description>
</hbox>
<hbox align="center">
<label id="zotero-attach-uri-label-input" value="&zotero.attachLink.label.link;" control="zotero-attach-uri-input"></label>
<textbox id="zotero-attach-uri-input" flex="1"/>
</hbox>
<hbox align="center">
<label id="zotero-attach-uri-label-title" value="&zotero.attachLink.label.title;" control="zotero-attach-uri-title"></label>
<textbox id="zotero-attach-uri-title" flex="1" placeholder="&zotero.general.optional;"/>
</hbox>
</vbox>
</dialog>

View file

@ -1472,9 +1472,24 @@
t.select();
// Leave text field open when window loses focus
var ignoreBlur = function () {
this.ignoreBlur = true;
}.bind(this);
var unignoreBlur = function () {
this.ignoreBlur = false;
}.bind(this);
addEventListener("deactivate", ignoreBlur);
addEventListener("activate", unignoreBlur);
t.addEventListener('blur', function () {
document.getBindingParent(this).blurHandler(this);
}, false);
var self = document.getBindingParent(this);
if (self.ignoreBlur) return;
removeEventListener("deactivate", ignoreBlur);
removeEventListener("activate", unignoreBlur);
self.blurHandler(this);
});
t.setAttribute('onkeypress', "return document.getBindingParent(this).handleKeyPress(event)");
this._tabDirection = false;

View file

@ -108,7 +108,9 @@
<parameter name="skipRefresh"/>
<body>
<![CDATA[
this._search = val ? val.toLowerCase() : false;
this._search = val
? val.toLowerCase().normalize()
: false;
if (!skipRefresh) {
this.refresh();

View file

@ -63,11 +63,19 @@ var Zotero_DownloadOverlay = new function() {
.getMostRecentWindow("navigator:browser");
var libraryID, collection;
try {
if(win.ZoteroPane.getCollectionTreeRow().filesEditable) {
let itemGroup = win.ZoteroPane.getCollectionTreeRow();
if (itemGroup.filesEditable) {
libraryID = win.ZoteroPane.getSelectedLibraryID();
collection = win.ZoteroPane.getSelectedCollection();
}
} catch(e) {};
// TODO: Just show an error instead?
else {
Zotero.debug("Cannot save files to library " + itemGroup.ref.libraryID
+ " -- saving to personal library instead", 2);
}
} catch(e) {
Zotero.debug(e, 1);
};
var recognizePDF = document.getElementById('zotero-recognizePDF').checked
&& !document.getElementById('zotero-recognizePDF').hidden

View file

@ -11,6 +11,8 @@
<script>
<![CDATA[
Components.utils.import("resource://zotero/config.js");
var Zotero_Error_Report = new function() {
this.init = init;
this.sendErrorReport = sendErrorReport;
@ -74,7 +76,7 @@
body += key + '=' + encodeURIComponent(parts[key]) + '&';
}
body = body.substr(0, body.length - 1);
var url = 'https://repo.zotero.org/repo/report';
var url = ZOTERO_CONFIG.REPOSITORY_URL + "report";
Zotero.HTTP.promise('POST', url,
{ body: body, successCodes: false, foreground: true })
.then(_sendErrorReportCallback)

View file

@ -420,9 +420,10 @@ var Zotero_File_Interface = new function() {
var clipboardService = Components.classes["@mozilla.org/widget/clipboard;1"].
getService(Components.interfaces.nsIClipboard);
var style = Zotero.Styles.get(style);
var cslEngine = style.getCiteProc();
// add HTML
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "html", asCitations);
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "html", asCitations);
var str = Components.classes["@mozilla.org/supports-string;1"].
createInstance(Components.interfaces.nsISupportsString);
str.data = bibliography;
@ -431,7 +432,7 @@ var Zotero_File_Interface = new function() {
// add text (or HTML source)
if(!asHTML) {
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "text", asCitations);
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "text", asCitations);
}
var str = Components.classes["@mozilla.org/supports-string;1"].
createInstance(Components.interfaces.nsISupportsString);
@ -517,7 +518,8 @@ var Zotero_File_Interface = new function() {
}
else {
var style = Zotero.Styles.get(io.style);
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style,
var cslEngine = style.getCiteProc();
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine,
items, format, io.mode === "citations");
}
} catch(e) {

@ -1 +1 @@
Subproject commit 76af9741424cc1432ffa0165d7b7bd5bbebe0d26
Subproject commit 23920d2cea52e12f2c3caac097266c13757e5acf

View file

@ -109,6 +109,17 @@ var ZoteroOverlay = new function()
document.getElementById('appcontent').addEventListener('mousemove', Zotero.ProgressWindowSet.updateTimers, false);
if (icon) {
// TODO: move to strings
let str = 'Zotero';
let key = Zotero.Keys.getKeyForCommand('openZotero');
if (key) {
str += ' ('
+ (Zotero.isMac ? '⇧⌘' : Zotero.getString('general.keys.ctrlShift'))
+ key
+ ')';
}
icon.setAttribute('tooltiptext', str);
if (iconPref == 1) {
icon.setAttribute('compact', true);
}

View file

@ -630,7 +630,9 @@ Zotero_Preferences.Debug_Output = {
document.getElementById('debug-output-submit').disabled = true;
document.getElementById('debug-output-submit-progress').hidden = false;
var url = "https://repo.zotero.org/repo/report?debug=1";
Components.utils.import("resource://zotero/config.js");
var url = ZOTERO_CONFIG.REPOSITORY_URL + "report?debug=1";
var output = Zotero.Debug.get(
Zotero.Prefs.get('debug.store.submitSize'),
Zotero.Prefs.get('debug.store.submitLineLength')

View file

@ -66,7 +66,6 @@ Zotero_Preferences.Cite = {
var treerow = document.createElement('treerow');
var titleCell = document.createElement('treecell');
var updatedCell = document.createElement('treecell');
var cslCell = document.createElement('treecell');
if (style.updated) {
var updatedDate = Zotero.Date.formatDate(Zotero.Date.strToDate(style.updated), true);
@ -78,14 +77,9 @@ Zotero_Preferences.Cite = {
treeitem.setAttribute('id', 'zotero-csl-' + style.styleID);
titleCell.setAttribute('label', style.title);
updatedCell.setAttribute('label', updatedDate);
// if not EN
if(style.type == "csl") {
cslCell.setAttribute('src', 'chrome://zotero/skin/tick.png');
}
treerow.appendChild(titleCell);
treerow.appendChild(updatedCell);
treerow.appendChild(cslCell);
treeitem.appendChild(treerow);
treechildren.appendChild(treeitem);

View file

@ -58,9 +58,8 @@
onselect="document.getElementById('styleManager-delete').disabled = undefined"
onkeypress="if (event.keyCode == event.DOM_VK_DELETE) { Zotero_Preferences.Cite.deleteSelectedStyle(); }">
<treecols>
<treecol id="styleManager-title" label="&zotero.preferences.cite.styles.styleManager.title;" flex="3"/>
<treecol id="styleManager-updated" label="&zotero.preferences.cite.styles.styleManager.updated;" flex="1"/>
<treecol id="styleManager-csl" label="&zotero.preferences.cite.styles.styleManager.csl;"/>
<treecol id="styleManager-title" label="&zotero.preferences.cite.styles.styleManager.title;" flex="1"/>
<treecol id="styleManager-updated" label="&zotero.preferences.cite.styles.styleManager.updated;"/>
</treecols>
<treechildren id="styleManager-rows"/>
</tree>

View file

@ -148,8 +148,8 @@
onsynctopreference="Zotero_Preferences.Sync.unverifyStorageServer()"
style="padding: 0; width: 7em">
<menupopup>
<menuitem label="http" value="http" style="padding: 0"/>
<menuitem label="https" value="https" style="padding: 0"/>
<menuitem label="http" value="http" style="padding: 0"/>
</menupopup>
</menulist>
<label value="://"/>
@ -240,7 +240,7 @@
<vbox>
<hbox id="storage-terms" style="margin-top: .4em; display: block" align="center">
<label>&zotero.preferences.sync.fileSyncing.tos1;</label>
<label class="zotero-text-link" href="http://www.digitalscholar.org/z_terms" value="&zotero.preferences.sync.fileSyncing.tos2;"/>
<label class="zotero-text-link" href="https://www.zotero.org/support/terms/terms_of_service" value="&zotero.preferences.sync.fileSyncing.tos2;"/>
<label>&zotero.preferences.period;</label>
</hbox>
</vbox>

View file

@ -95,30 +95,34 @@ var Zotero_RecognizePDF = new function() {
// Look up DOI
Zotero.debug("RecognizePDF: Found DOI: "+doi);
var translate = new Zotero.Translate.Search();
translate.setTranslator("11645bd1-0420-45c1-badb-53fb41eeb753");
translate.setSearch({"itemType":"journalArticle", "DOI":doi});
promise = _promiseTranslate(translate, libraryID);
var translateDOI = new Zotero.Translate.Search();
translateDOI.setTranslator("11645bd1-0420-45c1-badb-53fb41eeb753");
translateDOI.setSearch({"itemType":"journalArticle", "DOI":doi});
promise = _promiseTranslate(translateDOI, libraryID);
} else {
// Look for ISBNs if no DOI
var isbns = _findISBNs(allText);
if(isbns.length) {
Zotero.debug("RecognizePDF: Found ISBNs: " + isbns);
var translate = new Zotero.Translate.Search();
translate.setTranslator("c73a4a8c-3ef1-4ec8-8229-7531ee384cc4");
translate.setSearch({"itemType":"book", "ISBN":isbns[0]});
promise = _promiseTranslate(translate, libraryID);
} else {
promise = Zotero.Promise.reject("No ISBN or DOI found");
}
promise = Zotero.Promise.reject("No DOI found in text");
}
// If no DOI or ISBN, query Google Scholar
return promise.catch(function(error) {
Zotero.debug("RecognizePDF: "+error);
return me.GSFullTextSearch.findItem(lines, libraryID, stopCheckCallback);
});
return promise
// Look for ISBNs if no DOI
.catch(function(error) {
Zotero.debug("RecognizePDF: " + error);
var isbns = _findISBNs(allText);
if (isbns.length) {
Zotero.debug("RecognizePDF: Found ISBNs: " + isbns);
var translate = new Zotero.Translate.Search();
translate.setSearch({"itemType":"book", "ISBN":isbns[0]});
return _promiseTranslate(translate, libraryID);
} else {
return Zotero.Promise.reject("No ISBN found in text.");
}
})
// If no DOI or ISBN, query Google Scholar
.catch(function(error) {
Zotero.debug("RecognizePDF: " + error);
return me.GSFullTextSearch.findItem(lines, libraryID, stopCheckCallback);
});
});
}
@ -196,7 +200,10 @@ var Zotero_RecognizePDF = new function() {
if(success && translate.newItems.length) {
deferred.resolve(translate.newItems[0]);
} else {
deferred.reject("Translation with Google Scholar failed");
deferred.reject(translate.translator && translate.translator.length
? "Translation with " + translate.translator.map(t => t.label) + " failed"
: "Could not find a translator for given search item"
);
}
});
translate.translate(libraryID, false);

View file

@ -43,26 +43,29 @@
this.generateBibliography = generateBibliography;
function init() {
//refresh();
//refresh();
var iframe = document.getElementById('zotero-csl-preview-box');
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p>Select one or more items in Zotero and click the "Refresh" button to see how these items are rendered by the installed CSL citation styles.</p></body></html>';
}
function refresh() {
var iframe = document.getElementById('zotero-csl-preview-box');
var items = Zotero.getActiveZoteroPane().getSelectedItems();
if (items.length == 0) {
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p style="color: red">No references selected in Zotero.</p></body></html>';
if (items.length === 0) {
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p style="color: red">No items selected in Zotero.</p></body></html>';
return;
}
var progressWin = new Zotero.ProgressWindow();
// XXX needs its own string really!
progressWin.changeHeadline(Zotero.getString("pane.items.menu.createBib.multiple"));
var icon = 'chrome://zotero/skin/treeitem-attachment-file.png';
progressWin.addLines(document.title, icon)
progressWin.addLines(document.title, icon);
progressWin.show();
progressWin.startCloseTimer();
var f = function() {
var styles = Zotero.Styles.getAll();
// XXX needs its own string really for the title!
var str = '<html><head><title></title></head><body><h1>Citation/Bibliography list<h1>';
var str = '<html><head><title></title></head><body>';
for each(var style in styles) {
if (style.source) {
continue;
@ -70,14 +73,15 @@
Zotero.debug("Generate Bib for " + style.title);
var cite = generateBibliography(style);
if (cite) {
str += '<hr><h2>' + style.title + '</h2>';
str += '<h3>' + style.title + '</h3>';
str += cite;
str += '<hr>';
}
}
str += '</body></html>';
iframe.contentDocument.documentElement.innerHTML = str;
}
};
// Give progress window time to appear
setTimeout(f, 100);
}
@ -86,33 +90,13 @@
var iframe = document.getElementById('zotero-csl-preview-box');
var items = Zotero.getActiveZoteroPane().getSelectedItems();
if (items.length == 0) {
iframe.contentDocument.documentElement.innerHTML = '<html><head><title></title></head><body><p style="color: red">No references selected in Zotero.</p></body></html>';
if (items.length === 0) {
return '';
}
var authordate = document.getElementById("format-author-date");
var numeric = document.getElementById("format-numeric");
Zotero.debug("style class is " + style.class);
if (document.getElementById("format-note").checked == false && style.class == "note") {
Zotero.debug("CSL IGNORE NOTE one");
return '';
}
if (document.getElementById("format-in-text").checked == false && style.class == "in-text") {
Zotero.debug("CSL IGNORE IN-TEXT one");
return '';
}
var terms = new Object();
for each(var cat in style.categories) {
Zotero.debug("TERM is " + cat.toString());
terms[cat.toString()] = true;
}
if (!numeric.checked && terms["numeric"]) {
Zotero.debug("CSL IGNORE this numeric");
return '';
}
if (!authordate.checked && terms["author-date"]) {
Zotero.debug("CSL IGNORE this AD");
var citationFormat = document.getElementById("citation-format").selectedItem.value;
if (citationFormat != "all" && citationFormat != style.categories) {
Zotero.debug("CSL IGNORE: citation format is " + style.categories);
return '';
}
var styleEngine = style.getCiteProc();
@ -123,19 +107,17 @@
[], [], "html");
// Generate bibliography
if(!style.hasBibliography) {
var bibliography = '';
} else {
var bibliography = '';
if(style.hasBibliography) {
styleEngine.updateItems([item.id for each(item in items)]);
var bibliography = '<p>' + Zotero.Cite.makeFormattedBibliography(styleEngine, "html");
bibliography = Zotero.Cite.makeFormattedBibliography(styleEngine, "html");
}
return '<div>' +
citations + bibliography + '</div>';
return '<p>' + citations + '</p>' + bibliography;
}
}
}();
]]>
</script>
<!-- NEEDS LOCALISING -->
@ -144,18 +126,20 @@
<hbox align="center">
<button id="preview-refresh-button" label="Refresh" oncommand="Zotero_CSL_Preview.refresh()"/>
<groupbox orient="horizontal" align="center">
<label value="Class:"/>
<checkbox id="format-in-text" label="In-Text" checked="true"/>
<checkbox id="format-note" label="Notes" checked="true"/>
</groupbox>
<groupbox orient="horizontal" align="center">
<label value="Citation form:"/>
<checkbox id="format-author-date" label="Author Date" checked="true"/>
<checkbox id="format-numeric" label="Numeric" checked="true"/>
<label value="Citation format:" />
<menulist id="citation-format" oncommand="Zotero_CSL_Preview.refresh()">
<menupopup>
<menuitem label="all" value="all"/>
<menuitem label="author" value="author"/>
<menuitem label="author-date" value="author-date"/>
<menuitem label="label" value="label"/>
<menuitem label="note" value="note"/>
<menuitem label="numeric" value="numeric"/>
</menupopup>
</menulist>
</groupbox>
</hbox>
</hbox>
<splitter/>
<iframe id="zotero-csl-preview-box" flex="1" style="padding: 0 1em; background:white;" overflow="auto" type="content"/>
</vbox>

View file

@ -432,8 +432,29 @@ Zotero.Attachments = new function(){
}
// If no title provided, figure it out from the URL
if (!title){
title = url.substring(url.lastIndexOf('/')+1);
// Web addresses with paths will be whittled to the last element
// excluding references and queries. All others are the full string
if (!title) {
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var titleURL = ioService.newURI(url, null, null);
if (titleURL.scheme == 'http' || titleURL.scheme == 'https') {
titleURL = titleURL.QueryInterface(Components.interfaces.nsIURL);
if (titleURL.path == '/') {
title = titleURL.host;
}
else if (titleURL.fileName) {
title = titleURL.fileName;
}
else {
var dir = titleURL.directory.split('/');
title = dir[dir.length - 2];
}
}
else {
title = url;
}
}
// Override MIME type to application/pdf if extension is .pdf --
@ -677,6 +698,33 @@ Zotero.Attachments = new function(){
});
this.cleanAttachmentURI = function (uri, tryHttp) {
uri = uri.trim();
if (!uri) return false;
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
try {
return ios.newURI(uri, null, null).spec // Valid URI if succeeds
} catch (e) {
if (e instanceof Components.Exception
&& e.result == Components.results.NS_ERROR_MALFORMED_URI
) {
if (tryHttp && /\w\.\w/.test(uri)) {
// Assume it's a URL missing "http://" part
try {
return ios.newURI('http://' + uri, null, null).spec;
} catch (e) {}
}
Zotero.debug('cleanAttachmentURI: Invalid URI: ' + uri, 2);
return false;
}
throw e;
}
}
/*
* Create a new attachment with a missing file
*/
@ -887,6 +935,11 @@ Zotero.Attachments = new function(){
return path;
}
if (!baseDir.exists()) {
Zotero.debug("Base directory '" + baseDir.path + "' doesn't exist", 2);
return path;
}
// Get nsIFile for file
var attachmentFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);

View file

@ -71,17 +71,16 @@ Zotero.Cite = {
* @param {String} format The format of the output (html, text, or rtf)
* @return {String} Bibliography or item list in specified format
*/
"makeFormattedBibliographyOrCitationList":function(style, items, format, asCitationList) {
var cslEngine = style.getCiteProc();
"makeFormattedBibliographyOrCitationList":function(cslEngine, items, format, asCitationList) {
cslEngine.setOutputFormat(format);
cslEngine.updateItems([item.id for each(item in items)]);
if(!asCitationList) {
var bibliography = Zotero.Cite.makeFormattedBibliography(cslEngine, format);
if(bibliography) return bibliography;
}
var styleClass = style.class;
var styleClass = cslEngine.opt.class;
var citations = [cslEngine.appendCitationCluster({"citationItems":[{"id":item.id}], "properties":{}}, true)[0][1]
for each(item in items)];

View file

@ -80,7 +80,7 @@ if (!Array.indexOf) {
};
}
var CSL = {
PROCESSOR_VERSION: "1.0.539",
PROCESSOR_VERSION: "1.0.543",
CONDITION_LEVEL_TOP: 1,
CONDITION_LEVEL_BOTTOM: 2,
PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/,
@ -237,7 +237,7 @@ var CSL = {
MULTI_FIELDS: ["event", "publisher", "publisher-place", "event-place", "title", "container-title", "collection-title", "authority","edition","genre","title-short","medium","jurisdiction","archive","archive-place"],
CITE_FIELDS: ["first-reference-note-number", "locator", "locator-revision"],
MINIMAL_NAME_FIELDS: ["literal", "family"],
SWAPPING_PUNCTUATION: [".", "!", "?", ":",","],
SWAPPING_PUNCTUATION: [".", "!", "?", ":", ","],
TERMINAL_PUNCTUATION: [":", ".", ";", "!", "?", " "],
NONE: 0,
NUMERIC: 1,
@ -2595,6 +2595,9 @@ CSL.Engine.prototype.setAbbreviations = function (arg) {
this.sys.setAbbreviations(arg);
}
};
CSL.Engine.prototype.setSuppressTrailingPunctuation = function (arg) {
this.citation.opt.suppressTrailingPunctuation = !!arg;
};
CSL.Output = {};
CSL.Output.Queue = function (state) {
this.levelname = ["top"];
@ -3209,19 +3212,30 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
return false;
}
function matchLastChar(blob, chr) {
if (blob.strings.suffix.slice(0, 1) === chr) {
return true;
} else if ("string" === typeof blob.blobs) {
if (!PUNCT[chr]) {
return false;
}
if ("string" === typeof blob.blobs) {
if (blob.blobs.slice(-1) === chr) {
return true;
} else {
return false;
}
} else {
var child = blob.blobs[blob.blobs.length-1];
if (child) {
var childChar = child.strings.suffix.slice(-1);
if (!childChar) {
return matchLastChar(child,chr);
} else if (child.strings.suffix.slice(-1) == chr) {
return true;
} else {
return false;
}
} else {
return false;
}
}
for (var i=0,ilen=blob.blobs.length;i<ilen;i++) {
if (matchLastChar(blob.blobs[i])) return true;
}
return false;
};
function mergeChars (First, first, Second, second, merge_right) {
FirstStrings = "blobs" === first ? First : First.strings;
@ -3282,7 +3296,13 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
}
};
function upward (parent) {
if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) {
if (parent.blobs && "string" == typeof parent.blobs) {
if (PUNCT[parent.strings.suffix.slice(0,1)]
&& parent.strings.suffix.slice(0,1) === parent.blobs.slice(-1)) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
return;
} else if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) {
return;
}
var parentDecorations = blobHasDecorations(parent,true);
@ -3343,8 +3363,14 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
}
}
};
function downward (parent) {
if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) {
function downward (parent, top) {
if (parent.blobs && "string" == typeof parent.blobs) {
if (PUNCT[parent.strings.suffix.slice(0,1)]
&& parent.strings.suffix.slice(0,1) === parent.blobs.slice(-1)) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
return;
} else if ("object" !== typeof parent || "object" !== typeof parent.blobs || !parent.blobs.length) {
return;
}
var parentStrings = parent.strings;
@ -3379,25 +3405,28 @@ CSL.Output.Queue.adjust = function (punctInQuote) {
if (PUNCT[parentChar]) {
if (!blobEndsInNumber(child)) {
mergeChars(child, 'suffix', parent, 'suffix');
if (parentStrings.suffix.slice(0,1) === ".") {
childStrings.suffix += parentStrings.suffix.slice(0,1);
parentStrings.suffix = parentStrings.suffix.slice(1);
}
}
}
if (childStrings.suffix.slice(-1) === " " && parentStrings.suffix.slice(0,1)) {
parentStrings.suffix = parentStrings.suffix.slice(1);
}
} else {
if (matchLastChar(child,parent.strings.suffix.slice(0,1))) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
}
if (PUNCT_OR_SPACE[childStrings.suffix.slice(0,1)]) {
if ("string" === typeof child.blobs && child.blobs.slice(-1) === childStrings.suffix.slice(0,1)) {
childStrings.suffix = childStrings.suffix.slice(1);
}
if (childStrings.suffix.slice(-1) === parentStrings.suffix.slice(0, 1)) {
childStrings.suffix = childStrings.suffix.slice(0, -1);
parentStrings.suffix = parentStrings.suffix.slice(0, -1);
}
}
}
if (matchLastChar(parent,parent.strings.suffix.slice(0,1))) {
parent.strings.suffix = parent.strings.suffix.slice(1);
}
} else if (parentStrings.delimiter) {
if (PUNCT_OR_SPACE[parentStrings.delimiter.slice(0,1)]
&& parentStrings.delimiter.slice(0, 1) === childStrings.suffix.slice(-1)) {
@ -4198,7 +4227,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
this.tmp.citation_id = "" + citation.citationID;
obj = [];
obj.push(citationsPre.length);
obj.push(this.process_CitationCluster.call(this, sortedItems));
obj.push(this.process_CitationCluster.call(this, sortedItems, citation.citationID));
ret.push(obj);
ret.sort(function (a, b) {
if (a[0] > b[0]) {
@ -4329,9 +4358,14 @@ CSL.getCitationCluster = function (inputList, citationID) {
this.tmp.last_years_used = [];
this.tmp.backref_index = [];
this.tmp.cite_locales = [];
var suppressTrailingPunctuation = false;
if (this.opt.xclass === "note" && this.citation.opt.suppressTrailingPunctuation) {
suppressTrailingPunctuation = true;
}
if (citationID) {
this.registry.citationreg.citationById[citationID].properties.backref_index = false;
this.registry.citationreg.citationById[citationID].properties.backref_citation = false;
if (this.registry.citationreg.citationById[citationID].properties["suppress-trailing-punctuation"]) {
suppressTrailingPunctuation = true;
}
}
if (this.opt.xclass === "note") {
var parasets = [];
@ -4460,7 +4494,9 @@ CSL.getCitationCluster = function (inputList, citationID) {
&& this.sys.wrapCitationEntry
&& !this.tmp.just_looking
&& this.tmp.area === "citation")) {
this.output.queue[this.output.queue.length - 1].strings.suffix = use_layout_suffix;
if (!suppressTrailingPunctuation) {
this.output.queue[this.output.queue.length - 1].strings.suffix = use_layout_suffix;
}
this.output.queue[0].strings.prefix = this.citation.opt.layout_prefix;
}
}
@ -4933,7 +4969,7 @@ CSL.getBibliographyEntries = function (bibsection) {
for (var j=0,jlen=this.output.queue.length;j<jlen;j+=1) {
this.output.adjust.upward(this.output.queue[j]);
this.output.adjust.leftward(this.output.queue[j]);
this.output.adjust.downward(this.output.queue[j]);
this.output.adjust.downward(this.output.queue[j],true);
this.output.adjust.fix(this.output.queue[j]);
}
res = this.output.string(this, this.output.queue)[0];
@ -6408,15 +6444,17 @@ CSL.Node.layout = {
var sp;
if (item && item.prefix) {
sp = "";
var test_prefix = item.prefix.replace(/<[^>]+>/g, "").replace(/["'\u201d\u2019]/g,"").replace(/\s+$/, "").replace(/^[.\s]+/, "");
var test_prefix = item.prefix.replace(/<[^>]+>/g, "").replace(/["'\u201d\u2019\u00bb\u202f\u00a0 ]+$/g,"");
var test_char = test_prefix.slice(-1);
if (test_prefix.match(CSL.ENDSWITH_ROMANESQUE_REGEXP)) {
sp = " ";
} else if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_prefix.slice(-1))) {
} else if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_char) > -1) {
sp = " ";
} else if (test_char.match(/[\)\],0-9]/)) {
sp = " ";
}
var ignorePredecessor = false;
if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_prefix.slice(-1)) > -1
&& test_prefix.slice(0, 1) != test_prefix.slice(0, 1).toLowerCase()) {
if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_char) > -1) {
state.tmp.term_predecessor = false;
ignorePredecessor = true;
}
@ -7214,6 +7252,10 @@ CSL.NameOutput.prototype.setCommonTerm = function () {
}
freeters_offset += 1;
}
if (this.persons[v].length !== this.persons[vv].length) {
this.common_term = false;
return;
}
for (var j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {
if (this.etal_spec[v].persons[j] !== this.etal_spec[vv].persons[j]
|| !this._compareNamesets(this.persons[v][j], this.persons[vv][j])) {
@ -12654,7 +12696,7 @@ CSL.Util.FlipFlopper.prototype.init = function (str, blob) {
};
CSL.Util.FlipFlopper.prototype._normalizeString = function (str) {
var i, ilen;
str = str.replace(/\s+'\s+/," ","g");
str = str.replace(/\s+'\s+/g," ");
if (str.indexOf(this.quotechars[0]) > -1) {
for (i = 0, ilen = 2; i < ilen; i += 1) {
if (this.quotechars[i + 2]) {

View file

@ -28,7 +28,11 @@ Zotero.Connector = new function() {
const CONNECTOR_API_VERSION = 2;
var _ieStandaloneIframeTarget, _ieConnectorCallbacks;
this.isOnline = null;
// As of Chrome 38 (and corresponding Opera version 24?) pages loaded over
// https (i.e. the zotero bookmarklet iframe) can not send requests over
// http, so pinging Standalone at http://127.0.0.1 fails.
// Disable for all browsers, except IE, which may be used frequently with ZSA
this.isOnline = Zotero.isBookmarklet && !Zotero.isIE ? false : null;
/**
* Checks if Zotero is online and passes current status to callback
@ -36,7 +40,10 @@ Zotero.Connector = new function() {
*/
this.checkIsOnline = function(callback) {
// Only check once in bookmarklet
if(Zotero.isBookmarklet && this.isOnline !== null) callback(this.isOnline);
if(Zotero.isBookmarklet && this.isOnline !== null) {
callback(this.isOnline);
return;
}
if(Zotero.isIE) {
if(window.location.protocol !== "http:") {
@ -233,25 +240,7 @@ Zotero.Connector_Debug = new function() {
* Submit data to the sserver
*/
this.submitReport = function(callback) {
var uploadCallback = function (xmlhttp) {
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
if (!xmlhttp.responseXML) {
callback(false, 'Invalid response from server');
return;
}
var reported = xmlhttp.responseXML.getElementsByTagName('reported');
if (reported.length != 1) {
callback(false, 'The server returned an error. Please try again.');
return;
}
var reportID = reported[0].getAttribute('reportID');
callback(true, reportID);
}
Zotero.HTTP.doPost("http://www.zotero.org/repo/report?debug=1", Zotero.Debug.get(),
Zotero.HTTP.doPost(ZOTERO_CONFIG.REPOSITORY_URL + "report?debug=1", Zotero.Debug.get(),
function(xmlhttp) {
if (!xmlhttp.responseXML) {
callback(false, 'Invalid response from server');
@ -267,4 +256,4 @@ Zotero.Connector_Debug = new function() {
callback(true, reportID);
}, {"Content-Type":"text/plain"});
}
}
}

View file

@ -66,7 +66,7 @@ Zotero.Repo = new function() {
}
// then try repo
Zotero.HTTP.doGet(ZOTERO_CONFIG.REPOSITORY_URL+"/code/"+translatorID+"?version="+Zotero.version,
Zotero.HTTP.doGet(ZOTERO_CONFIG.REPOSITORY_URL + "code/" + translatorID + "?version=" + Zotero.version,
function(xmlhttp) {
_haveCode(xmlhttp.status === 200 ? xmlhttp.responseText : false, translatorID,
Zotero.Repo.SOURCE_REPO, callback);
@ -137,7 +137,7 @@ Zotero.Repo = new function() {
* Retrieve metadata from repository
*/
function _updateFromRepo(reset, callback) {
var url = ZOTERO_CONFIG.REPOSITORY_URL+"/metadata?version="+Zotero.version+"&last="+
var url = ZOTERO_CONFIG.REPOSITORY_URL + "metadata?version=" + Zotero.version + "&last="+
(reset ? "0" : Zotero.Prefs.get("connector.repo.lastCheck.repoTime"));
Zotero.HTTP.doGet(url, function(xmlhttp) {

View file

@ -196,7 +196,7 @@ Zotero.Translate.ItemSaver.prototype = {
Zotero.API.createItem({"items":newItems}, function(statusCode, response) {
if(statusCode !== 200) {
callback(false, new Error("Save to server failed with "+statusCode+" "+response));
retrun;
return;
}
try {

View file

@ -93,7 +93,7 @@ Zotero.Collection.prototype._set = function (field, value) {
switch (field) {
case 'name':
value = value.trim();
value = value.trim().normalize();
break;
case 'version':

View file

@ -175,7 +175,7 @@ Zotero.Creators = new function() {
switch (field) {
case 'firstName':
case 'lastName':
cleanedData[field] = val.trim();
cleanedData[field] = val.trim().normalize();
break;
case 'fieldMode':

View file

@ -694,7 +694,7 @@ Zotero.Item.prototype.getFieldsNotInType = function (itemTypeID, allowBaseConver
*/
Zotero.Item.prototype.setField = function(field, value, loadIn) {
if (typeof value == 'string') {
value = value.trim();
value = value.trim().normalize();
}
this._disabledCheck();
@ -4286,9 +4286,9 @@ Zotero.Item.prototype.loadDisplayTitle = Zotero.Promise.coroutine(function* (rel
var creatorsData = this.getCreators();
var authors = [];
var participants = [];
for (let j=0; j<creatorsData.length; j++) {
let creatorData = creatorsData[j];
let creatorTypeID = creatorsData[j].creatorTypeID;
for (let i=0; i<creatorsData.length; i++) {
let creatorData = creatorsData[i];
let creatorTypeID = creatorsData[i].creatorTypeID;
if ((itemTypeID == 8 && creatorTypeID == 16) || // 'letter'
(itemTypeID == 10 && creatorTypeID == 7)) { // 'interview'
participants.push(creatorData);
@ -4302,11 +4302,12 @@ Zotero.Item.prototype.loadDisplayTitle = Zotero.Promise.coroutine(function* (rel
var strParts = [];
if (participants.length > 0) {
let names = [];
for (let j=0; j<participants.length; j++) {
let max = Math.min(4, participants.length);
for (let i=0; i<max; i++) {
names.push(
participants[j].name !== undefined
? participants[j].name
: participants[j].lastName
participants[i].name !== undefined
? participants[i].name
: participants[i].lastName
);
}
switch (names.length) {

View file

@ -828,7 +828,7 @@ Zotero.Tags = new function() {
}
var cleanedData = {};
cleanedData.tag = (data.tag + '').trim();
cleanedData.tag = (data.tag + '').trim().normalize();
if (data.type) {
cleanedData.type = parseInt(data.type);
}

View file

@ -46,23 +46,6 @@ Zotero.Debug = new function () {
return;
}
// Properly display thrown Error objects
if (message && message.constructor) {
switch (message.constructor.name) {
case 'Error':
case 'EvalError':
case 'RangeError':
case 'ReferenceError':
case 'SyntaxError':
case 'TypeError':
case 'URIError':
message = "'message' => \"" + message.message + "\"\n"
+ Zotero.Utilities.varDump(message) + "\n"
+ message.stack;
break;
}
}
if (typeof message != 'string') {
message = Zotero.Utilities.varDump(message);
}

View file

@ -160,7 +160,9 @@ Zotero.Duplicates.prototype._findDuplicates = Zotero.Promise.coroutine(function*
}
// If no comparison function, check for exact match
else {
if (rows[i].value !== rows[j].value) {
if (!rows[i].value || !rows[j].value
|| (rows[i].value !== rows[j].value)
) {
break;
}
}
@ -197,8 +199,8 @@ Zotero.Duplicates.prototype._findDuplicates = Zotero.Promise.coroutine(function*
let newRows = [];
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
// Ignore formatting
let newVal = (row.value + '').replace(/[^\dX]+/ig, '').toUpperCase();
let newVal = Zotero.Utilities.cleanISBN('' + row.value);
if (!newVal) continue;
isbnCache[row.itemID] = newVal;
newRows.push({
itemID: row.itemID,

View file

@ -429,6 +429,115 @@ Zotero.File = new function(){
}
this.createShortened = function (file, type, mode, maxBytes) {
if (!maxBytes) {
maxBytes = 255;
}
// Limit should be 255, but leave room for unique numbering if necessary
var padding = 3;
while (true) {
var newLength = maxBytes - padding;
try {
file.create(type, mode);
}
catch (e) {
let pathError = false;
let pathByteLength = Zotero.Utilities.Internal.byteLength(file.path);
let fileNameByteLength = Zotero.Utilities.Internal.byteLength(file.leafName);
// Windows API only allows paths of 260 characters
//
// I think this should be >260 but we had a report of an error with exactly
// 260 chars: https://forums.zotero.org/discussion/41410
if (e.name == "NS_ERROR_FILE_NOT_FOUND" && pathByteLength >= 260) {
Zotero.debug("Path is " + file.path);
pathError = true;
}
// ext3/ext4/HFS+ have a filename length limit of ~254 bytes
else if ((e.name == "NS_ERROR_FAILURE" || e.name == "NS_ERROR_FILE_NAME_TOO_LONG")
&& (fileNameByteLength >= 254 || (Zotero.isLinux && fileNameByteLength > 143))) {
Zotero.debug("Filename is '" + file.leafName + "'");
}
else {
Zotero.debug("Path is " + file.path);
throw e;
}
// Preserve extension
var matches = file.leafName.match(/.+(\.[a-z0-9]{0,20})$/i);
var ext = matches ? matches[1] : "";
if (pathError) {
let pathLength = pathByteLength - fileNameByteLength;
newLength -= pathLength;
// Make sure there's a least 1 character of the basename left over
if (newLength - ext.length < 1) {
throw new Error("Path is too long");
}
}
// Shorten the filename
//
// Shortened file could already exist if there was another file with a
// similar name that was also longer than the limit, so we do this in a
// loop, adding numbers if necessary
var uniqueFile = file.clone();
var step = 0;
while (step < 100) {
let newBaseName = uniqueFile.leafName.substr(0, newLength - ext.length);
if (step == 0) {
var newName = newBaseName + ext;
}
else {
var newName = newBaseName + "-" + step + ext;
}
// Check actual byte length, and shorten more if necessary
if (Zotero.Utilities.Internal.byteLength(newName) > maxBytes) {
step = 0;
newLength--;
continue;
}
uniqueFile.leafName = newName;
if (!uniqueFile.exists()) {
break;
}
step++;
}
var msg = "Shortening filename to '" + newName + "'";
Zotero.debug(msg, 2);
Zotero.log(msg, 'warning');
try {
uniqueFile.create(Components.interfaces.nsIFile.type, mode);
}
catch (e) {
// On Linux, try 143, which is the max filename length with eCryptfs
if (e.name == "NS_ERROR_FILE_NAME_TOO_LONG" && Zotero.isLinux && uniqueFile.leafName.length > 143) {
Zotero.debug("Trying shorter filename in case of filesystem encryption", 2);
maxBytes = 143;
continue;
}
else {
throw e;
}
}
file.leafName = uniqueFile.leafName;
}
break;
}
}
this.copyToUnique = function (file, newFile) {
newFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
var newName = newFile.leafName;
@ -664,10 +773,13 @@ Zotero.File = new function(){
var opWord = Zotero.getString('file.accessError.updated');
}
Zotero.debug(file.path);
Zotero.debug(e, 1);
Components.utils.reportError(e);
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' || e.name == 'NS_ERROR_FILE_IS_LOCKED'
// These show up on some Windows systems
|| e.name == 'NS_ERROR_FAILURE' || e.name == 'NS_ERROR_FILE_NOT_FOUND') {
Zotero.debug(e);
str = str + " " + Zotero.getString('file.accessError.cannotBe') + " " + opWord + ".";
var checkFileWindows = Zotero.getString('file.accessError.message.windows');
var checkFileOther = Zotero.getString('file.accessError.message.other');

View file

@ -997,17 +997,11 @@ Zotero.HTTP = new function() {
if(typeof url !== "object") {
url = Services.io.newURI(url, null, null).QueryInterface(Components.interfaces.nsIURL);
}
var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
.createInstance(Components.interfaces.nsIDOMParser);
var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
.getService(Components.interfaces.nsIScriptSecurityManager);
parser.init(secMan.getCodebasePrincipal(url), url, url);
return Zotero.Translate.DOMWrapper.wrap(doc, {
"documentURI":{ "enumerable":true, "value":url.spec },
"URL":{ "enumerable":true, "value":url.spec },
"location":{ "enumerable":true, "value":(new Zotero.HTTP.Location(url)) },
"defaultView":{ "enumerable":true, "value":(new Zotero.HTTP.Window(url)) }
"documentURI":url.spec,
"URL":url.spec,
"location":new Zotero.HTTP.Location(url),
"defaultView":new Zotero.HTTP.Window(url)
});
}
}

View file

@ -560,12 +560,19 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
// Row might already be gone (e.g. if this is a child and
// 'modify' was sent to parent)
let row = this._itemRowMap[ids[i]];
if (push && row != undefined) {
if (push && row !== undefined) {
// Don't remove child items from collections, because it's handled by 'modify'
if (action == 'remove' && this.getParentIndex(row) != -1) {
continue;
}
rows.push(row);
// Remove child items of removed parents
if (this.isContainer(row) && this.isContainerOpen(row)) {
while (++row < this.rowCount && this.getLevel(row) > 0) {
rows.push(row);
}
}
}
}
@ -1456,9 +1463,25 @@ Zotero.ItemTreeView.prototype.sort = Zotero.Promise.coroutine(function* (itemID)
var creatorSortCache = {};
// Regexp to extract the whole string up to an optional "and" or "et al."
var andEtAlRegExp = new RegExp(
// Extract the beginning of the string in non-greedy mode
"^.+?"
// up to either the end of the string, "et al." at the end of string
+ "(?=(?: " + Zotero.getString('general.etAl').replace('.', '\.') + ")?$"
// or ' and '
+ "| " + Zotero.getString('general.and') + " "
+ ")"
);
function creatorSort(a, b) {
var itemA = a.ref;
var itemB = b.ref;
//
// Try sorting by the first name in the firstCreator field, since we already have it
//
// For sortCreatorAsString mode, just use the whole string
//
var aItemID = a.id,
bItemID = b.id,
fieldA = creatorSortCache[aItemID],
@ -1467,13 +1490,25 @@ Zotero.ItemTreeView.prototype.sort = Zotero.Promise.coroutine(function* (itemID)
var sortStringA = itemA[prop];
var sortStringB = itemB[prop];
if (fieldA === undefined) {
var matches = Zotero.Items.getSortTitle(sortStringA).match(/^[^\s]+/);
var fieldA = matches ? matches[0] : '';
let firstCreator = Zotero.Items.getSortTitle(sortStringA);
if (sortCreatorAsString) {
var fieldA = firstCreator;
}
else {
var matches = andEtAlRegExp.exec(firstCreator);
var fieldA = matches ? matches[0] : '';
}
creatorSortCache[aItemID] = fieldA;
}
if (fieldB === undefined) {
var matches = Zotero.Items.getSortTitle(sortStringB).match(/^[^\s]+/);
var fieldB = matches ? matches[0] : '';
let firstCreator = Zotero.Items.getSortTitle(sortStringB);
if (sortCreatorAsString) {
var fieldB = firstCreator;
}
else {
var matches = andEtAlRegExp.exec(firstCreator);
var fieldB = matches ? matches[0] : '';
}
creatorSortCache[bItemID] = fieldB;
}

View file

@ -401,8 +401,8 @@ Zotero.MIME = new function(){
.getService(Components.interfaces.nsIAppShellService)
.hiddenDOMWindow.navigator.mimeTypes;
for (var i in types){
if (types[i].type && types[i].type == mimeType){
for (let type of types) {
if (type.type && type.type == mimeType) {
Zotero.debug('MIME type ' + mimeType + ' can be handled by plugins');
return true;
}

View file

@ -352,8 +352,9 @@ Zotero.QuickCopy = new function() {
var text = csl.previewCitationCluster(citation, [], [], "text");
} else {
var style = Zotero.Styles.get(format);
var html = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "html");
var text = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, "text");
var cslEngine = style.getCiteProc();
var html = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "html");
var text = Zotero.Cite.makeFormattedBibliographyOrCitationList(cslEngine, items, "text");
}
return {text:(contentType == "html" ? html : text), html:html};

View file

@ -1008,7 +1008,7 @@ Zotero.Schema = new function(){
var body = 'styles=' + encodeURIComponent(JSON.stringify(styleTimestamps));
try {
let xmlhttp = Zotero.HTTP.promise("POST", url, { body: body });
let xmlhttp = Zotero.HTTP.promise("POST", ZOTERO_CONFIG.REPOSITORY_URL, { body: body });
return _updateFromRepositoryCallback(xmlhttp, !!force);
}
catch (e) {

View file

@ -94,7 +94,7 @@ Zotero.Search.prototype._set = function (field, value) {
switch (field) {
case 'name':
value = value.trim();
value = value.trim().normalize();
break;
case 'version':
@ -323,6 +323,8 @@ Zotero.Search.prototype.addCondition = Zotero.Promise.coroutine(function* (condi
if (condition == 'quicksearch-titleCreatorYear') {
yield this.addCondition('title', operator, part.text, false);
yield this.addCondition('publicationTitle', operator, part.text, false);
yield this.addCondition('shortTitle', operator, part.text, false);
yield this.addCondition('court', operator, part.text, false);
yield this.addCondition('year', operator, part.text, false);
}
else {
@ -383,6 +385,8 @@ Zotero.Search.prototype.addCondition = Zotero.Promise.coroutine(function* (condi
let mode;
[condition, mode] = Zotero.SearchConditions.parseCondition(condition);
if (typeof value == 'string') value = value.normalize();
this._conditions[searchConditionID] = {
id: searchConditionID,
condition: condition,
@ -428,6 +432,8 @@ Zotero.Search.prototype.updateCondition = Zotero.Promise.coroutine(function* (se
var [condition, mode] = Zotero.SearchConditions.parseCondition(condition);
if (typeof value == 'string') value = value.normalize();
this._conditions[searchConditionID] = {
id: parseInt(searchConditionID),
condition: condition,
@ -2337,6 +2343,7 @@ Zotero.SearchConditions = new function(){
return Zotero.getString('searchConditions.' + str)
}
catch (e) {
Zotero.debug("String not found for searchConditions." + str, 2);
return Zotero.ItemFields.getLocalizedString(null, str);
}
}

View file

@ -375,8 +375,8 @@ Zotero.Server.Connector.SaveItem.prototype = {
sendResponseCallback(500);
}
} else {
Zotero.logError(items);
sendResponseCallback(500);
throw newItems;
}
}, Zotero.Server.Connector.AttachmentProgressManager.onProgress);
}

View file

@ -1091,7 +1091,7 @@ Zotero.Sync.Storage = new function () {
// If library isn't editable but filename was changed, update
// database without updating the item's mod time, which would result
// in a library access error
if (!Zotero.Items.editCheck(item)) {
if (!Zotero.Items.isEditable(item)) {
Zotero.debug("File renamed without library access -- "
+ "updating itemAttachments path", 3);
item.relinkAttachmentFile(newFile, true);
@ -1363,80 +1363,51 @@ Zotero.Sync.Storage = new function () {
Zotero.debug("Moving download file " + tempFile.leafName + " into attachment directory as '" + fileName + "'");
try {
tempFile.moveTo(parentDir, fileName);
var destFile = parentDir.clone();
destFile.append(fileName);
Zotero.File.createShortened(destFile, Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
}
catch (e) {
var destFile = file.clone();
Zotero.File.checkFileAccessError(e, destFile, 'create');
}
if (destFile.leafName != fileName) {
Zotero.debug("Changed filename '" + fileName + "' to '" + destFile.leafName + "'");
var windowsLength = false;
var nameLength = false;
// Windows API only allows paths of 260 characters
if (e.name == "NS_ERROR_FILE_NOT_FOUND" && destFile.path.length > 255) {
windowsLength = true;
}
// ext3/ext4/HFS+ have a filename length limit of ~254 bytes
//
// These filenames will almost always be ASCII ad files,
// but allow an extra 10 bytes anyway
else if (e.name == "NS_ERROR_FAILURE" && destFile.leafName.length >= 244) {
nameLength = true;
}
// Filesystem encryption (or, more specifically, filename encryption)
// 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) {
Zotero.debug(e);
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
return;
}
if (windowsLength || nameLength) {
// Preserve extension
var matches = destFile.leafName.match(/\.[a-z0-9]{0,8}$/);
var ext = matches ? matches[0] : "";
if (windowsLength) {
var pathLength = destFile.path.length - destFile.leafName.length;
var newLength = 255 - pathLength;
// Require 40 available characters in path -- this is arbitrary,
// but otherwise filenames are going to end up being cut off
if (newLength < 40) {
var msg = "Due to a Windows path length limitation, your Zotero data directory "
+ "is too deep in the filesystem for syncing to work reliably. "
+ "Please relocate your Zotero data to a higher directory.";
throw (msg);
}
// Abort if Windows path limitation would cause filenames to be overly truncated
if (Zotero.isWin && destFile.leafName.length < 40) {
try {
destFile.remove(false);
}
else {
var newLength = 254;
}
// Shorten file if it's too long -- we don't relink it, but this should
// be pretty rare and probably only occurs on extraneous files with
// gibberish for filenames
var fileName = destFile.leafName.substr(0, newLength - (ext.length + 1)) + ext;
var msg = "Shortening filename to '" + fileName + "'";
Zotero.debug(msg, 2);
Components.utils.reportError(msg);
tempFile.moveTo(parentDir, fileName);
renamed = true;
catch (e) {}
// TODO: localize
var msg = "Due to a Windows path length limitation, your Zotero data directory "
+ "is too deep in the filesystem for syncing to work reliably. "
+ "Please relocate your Zotero data to a higher directory.";
Zotero.debug(msg, 1);
throw new Error(msg);
}
else {
Components.utils.reportError(e);
var msg = Zotero.getString('sync.storage.error.fileNotCreated', parentDir.leafName + '/' + fileName);
throw(msg);
renamed = true;
}
try {
tempFile.moveTo(parentDir, destFile.leafName);
}
catch (e) {
try {
destFile.remove(false);
}
catch (e) {}
Zotero.File.checkFileAccessError(e, destFile, 'create');
}
var returnFile = null;
// processDownload() needs to know that we're renaming the file
if (renamed) {
var returnFile = file.clone();
returnFile = destFile.clone();
}
return returnFile;
});
@ -1566,124 +1537,48 @@ Zotero.Sync.Storage = new function () {
}
try {
destFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
Zotero.File.createShortened(destFile, Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
}
catch (e) {
Zotero.debug(e, 1);
Components.utils.reportError(e);
var windowsLength = false;
var nameLength = false;
zipReader.close();
// Windows API only allows paths of 260 characters
if (e.name == "NS_ERROR_FILE_NOT_FOUND" && destFile.path.length > 255) {
Zotero.debug("Path is " + destFile.path);
windowsLength = true;
}
// ext3/ext4/HFS+ have a filename length limit of ~254 bytes
//
// These filenames will almost always be ASCII ad files,
// but allow an extra 10 bytes anyway
else if (e.name == "NS_ERROR_FAILURE" && destFile.leafName.length >= 244) {
Zotero.debug("Filename is " + destFile.leafName);
nameLength = true;
}
// Filesystem encryption (or, more specifically, filename encryption)
// 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) {
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
continue;
}
else {
Zotero.debug("Path is " + destFile.path);
}
Zotero.File.checkFileAccessError(e, destFile, 'create');
}
if (destFile.leafName != fileName) {
Zotero.debug("Changed filename '" + fileName + "' to '" + destFile.leafName + "'");
if (windowsLength || nameLength) {
// Preserve extension
var matches = destFile.leafName.match(/\.[a-z0-9]{0,8}$/);
var ext = matches ? matches[0] : "";
if (windowsLength) {
var pathLength = destFile.path.length - destFile.leafName.length;
// Limit should be 255, but a shorter limit seems to be
// enforced for nsIZipReader.extract() below on
// non-English systems
var newLength = 240 - pathLength;
// Require 40 available characters in path -- this is arbitrary,
// but otherwise filenames are going to end up being cut off
if (newLength < 40) {
zipReader.close();
var msg = "Due to a Windows path length limitation, your Zotero data directory "
+ "is too deep in the filesystem for syncing to work reliably. "
+ "Please relocate your Zotero data to a higher directory.";
throw (msg);
}
}
else {
var newLength = 240;
}
// Shorten file if it's too long -- we don't relink it, but this should
// be pretty rare and probably only occurs on extraneous files with
// gibberish for filenames
//
// Shortened file could already exist if there was another file with a
// similar name that was also longer than the limit, so we do this in a
// loop, adding numbers if necessary
var step = 0;
do {
if (step == 0) {
var newName = destFile.leafName.substr(0, newLength - ext.length) + ext;
}
else {
var newName = destFile.leafName.substr(0, newLength - ext.length) + "-" + step + ext;
}
destFile.leafName = newName;
step++;
}
while (destFile.exists());
var msg = "Shortening filename to '" + newName + "'";
Zotero.debug(msg, 2);
Components.utils.reportError(msg);
// Abort if Windows path limitation would cause filenames to be overly truncated
if (Zotero.isWin && destFile.leafName.length < 40) {
try {
destFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
destFile.remove(false);
}
catch (e) {
// See above
if (e.name == "NS_ERROR_FAILURE" && Zotero.isLinux && destFile.leafName.length > 130) {
Zotero.debug(e);
var msg = Zotero.getString('sync.storage.error.encryptedFilenames', destFile.leafName);
Components.utils.reportError(msg);
continue;
}
zipReader.close();
Components.utils.reportError(e);
var msg = Zotero.getString('sync.storage.error.fileNotCreated', parentDir.leafName + '/' + fileName);
throw(msg);
}
if (primaryFile) {
renamed = true;
}
}
else {
catch (e) {}
zipReader.close();
Components.utils.reportError(e);
var msg = Zotero.getString('sync.storage.error.fileNotCreated', parentDir.leafName + '/' + fileName);
throw(msg);
// TODO: localize
var msg = "Due to a Windows path length limitation, your Zotero data directory "
+ "is too deep in the filesystem for syncing to work reliably. "
+ "Please relocate your Zotero data to a higher directory.";
Zotero.debug(msg, 1);
throw new Error(msg);
}
if (primaryFile) {
renamed = true;
}
}
try {
zipReader.extract(entryName, destFile);
}
catch (e) {
Zotero.debug(destFile.path);
try {
destFile.remove(false);
}
catch (e) {}
// For advertising junk files, ignore a bug on Windows where
// destFile.create() works but zipReader.extract() doesn't

View file

@ -310,8 +310,7 @@ Zotero.Sync.Storage.ZFS = (function () {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var win = wm.getMostRecentWindow("navigator:browser");
var browser = win.getBrowser();
browser.selectedTab = browser.addTab(url);
win.ZoteroPane.loadURI(url);
}
}
@ -414,7 +413,8 @@ Zotero.Sync.Storage.ZFS = (function () {
var fis = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance(Components.interfaces.nsIFileInputStream);
fis.init(file, 0x01, 0, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF);
fis.init(file, 0x01, 0, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF
| Components.interfaces.nsIFileInputStream.REOPEN_ON_REWIND);
var bis = Components.classes["@mozilla.org/network/buffered-input-stream;1"]
.createInstance(Components.interfaces.nsIBufferedInputStream)

View file

@ -444,17 +444,29 @@ Zotero.Style = function(arg) {
Zotero.Styles.ns);
this.updated = Zotero.Utilities.xpathText(doc, '/csl:style/csl:info[1]/csl:updated[1]',
Zotero.Styles.ns).replace(/(.+)T([^\+]+)\+?.*/, "$1 $2");
this.categories = [category.getAttribute("term")
for each(category in Zotero.Utilities.xpath(doc,
'/csl:style/csl:info[1]/csl:category', Zotero.Styles.ns))
if(category.hasAttribute("term"))];
this.locale = Zotero.Utilities.xpathText(doc, '/csl:style/@default-locale',
Zotero.Styles.ns) || null;
this._class = doc.documentElement.getAttribute("class");
this._usesAbbreviation = !!Zotero.Utilities.xpath(doc,
'//csl:text[(@variable="container-title" and @form="short") or (@variable="container-title-short")][1]',
Zotero.Styles.ns).length;
this._hasBibliography = !!doc.getElementsByTagName("bibliography").length;
this._version = doc.documentElement.getAttribute("version");
if(!this._version) this._version = "0.8";
if(!this._version) {
this._version = "0.8";
//In CSL 0.8.1, the "term" attribute on cs:category stored both
//citation formats and fields.
this.categories = [category.getAttribute("term")
for each(category in Zotero.Utilities.xpath(doc,
'/csl:style/csl:info[1]/csl:category', Zotero.Styles.ns))
if(category.hasAttribute("term"))];
} else {
//CSL 1.0 introduced a dedicated "citation-format" attribute on cs:category
this.categories = Zotero.Utilities.xpathText(doc,
'/csl:style/csl:info[1]/csl:category[@citation-format][1]/@citation-format',
Zotero.Styles.ns);
}
this.source = Zotero.Utilities.xpathText(doc,
'/csl:style/csl:info[1]/csl:link[@rel="source" or @rel="independent-parent"][1]/@href',
@ -478,6 +490,7 @@ Zotero.Style.prototype.getCiteProc = function(automaticJournalAbbreviations) {
}
// determine version of parent style
var overrideLocale = false; // to force dependent style locale
if(this.source) {
var parentStyle = Zotero.Styles.get(this.source);
if(!parentStyle) {
@ -485,6 +498,14 @@ Zotero.Style.prototype.getCiteProc = function(automaticJournalAbbreviations) {
Zotero.Styles.ios.newFileURI(this.file).spec, null));
}
var version = parentStyle._version;
// citeproc-js will not know anything about the dependent style, including
// the default-locale, so we need to force locale if a dependent style
// contains one
if(this.locale) {
overrideLocale = true;
locale = this.locale;
}
} else {
var version = this._version;
}
@ -519,7 +540,12 @@ Zotero.Style.prototype.getCiteProc = function(automaticJournalAbbreviations) {
}
try {
return new Zotero.CiteProc.CSL.Engine(new Zotero.Cite.System(automaticJournalAbbreviations), xml, locale);
return new Zotero.CiteProc.CSL.Engine(
new Zotero.Cite.System(automaticJournalAbbreviations),
xml,
locale,
overrideLocale
);
} catch(e) {
Zotero.logError(e);
throw e;
@ -655,4 +681,4 @@ Zotero.Style.prototype.remove = function() {
}
Zotero.Styles.init();
}
}

View file

@ -1630,7 +1630,7 @@ Zotero.Sync.Server = new function () {
_error(e);
}
Q.async(Zotero.Sync.Server.Data.processUpdatedXML(
var result = Q.async(Zotero.Sync.Server.Data.processUpdatedXML(
responseNode.getElementsByTagName('updated')[0],
lastLocalSyncDate,
syncSession,
@ -1839,13 +1839,11 @@ Zotero.Sync.Server = new function () {
Zotero.HTTP.doPost(url, body, uploadCallback);
}
}
))()
.then(
null,
function (e) {
errorHandler(e);
}
);
))();
if (Q.isPromise(result)) {
result.catch(errorHandler);
}
}
catch (e) {
_error(e);
@ -1977,7 +1975,7 @@ Zotero.Sync.Server = new function () {
catch (e) {
Zotero.debug(e);
}
var kbURL = 'http://zotero.org/support/kb/ssl_certificate_error';
var kbURL = 'https://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);
@ -2679,8 +2677,6 @@ Zotero.Sync.Server.Data = new function() {
this.processUpdatedXML = function (updatedNode, lastLocalSyncDate, syncSession, defaultLibraryID, callback) {
yield true;
updatedNode.xpath = function (path) {
return Zotero.Utilities.xpath(this, path);
};

View file

@ -240,7 +240,16 @@ Zotero.Translate.Sandbox = {
if(!Zotero.isBookmarklet) arg = JSON.parse(JSON.stringify(arg));
return translation.setSearch(arg);
};
safeTranslator.setDocument = function(arg) { return translation.setDocument(arg) };
safeTranslator.setDocument = function(arg) {
if (Zotero.isFx && !Zotero.isBookmarklet) {
if (arg.wrappedJSObject && arg.wrappedJSObject.__wrappedObject) {
arg = arg.wrappedJSObject.__wrappedObject;
}
return translation.setDocument(new XPCNativeWrapper(arg));
} else {
return translation.setDocument(arg);
}
};
var errorHandlerSet = false;
safeTranslator.setHandler = function(arg1, arg2) {
if(arg1 === "error") errorHandlerSet = true;
@ -249,15 +258,14 @@ Zotero.Translate.Sandbox = {
try {
item = item.wrappedJSObject ? item.wrappedJSObject : item;
if(arg1 == "itemDone") {
var sbZotero = translate._sandboxManager.sandbox.Zotero;
if(sbZotero.wrappedJSObject) sbZotero = sbZotero.wrappedJSObject;
if(Zotero.isFx && !Zotero.isBookmarklet
&& (translate instanceof Zotero.Translate.Web
|| translate instanceof Zotero.Translate.Search)) {
// Necessary to get around object wrappers in Firefox
item = translate._sandboxManager._copyObject(item);
}
item.complete = translate._sandboxZotero.Item.prototype.complete;
} else if(arg1 == "translators" && Zotero.isFx && !Zotero.isBookmarklet) {
var translators = new translate._sandboxManager.sandbox.Array();
translators = translators.wrappedJSObject || translators;
for (var i=0; i<item.length; i++) {
translators.push(item[i]);
}
item = translators;
}
arg2(obj, item);
} catch(e) {
@ -344,7 +352,6 @@ Zotero.Translate.Sandbox = {
if(!Zotero.Utilities.isEmpty(sandbox.exports)) {
sandbox.exports.Zotero = sandbox.Zotero;
sandbox = sandbox.exports;
if(Zotero.isFx && sandbox.wrappedJSObject) sandbox = sandbox.wrappedJSObject;
} else {
translate._debug("COMPAT WARNING: "+translation.translator[0].label+" does "+
"not export any properties. Only detect"+translation._entryFunctionSuffix+
@ -359,6 +366,18 @@ Zotero.Translate.Sandbox = {
return;
});
};
if(Zotero.isFx && Zotero.platformMajorVersion >= 33) {
for(var i in safeTranslator) {
if (typeof(safeTranslator[i]) === "function") {
safeTranslator[i] = translate._sandboxManager._makeContentForwarder(function(func) {
return function() {
func.apply(safeTranslator, this.args.wrappedJSObject || this.args);
}
}(safeTranslator[i]));
}
}
}
return safeTranslator;
},
@ -405,7 +424,7 @@ Zotero.Translate.Sandbox = {
*/
"selectItems":function(translate, items, callback) {
function transferObject(obj) {
return Zotero.isFx ? translate._sandboxManager.sandbox.JSON.parse(JSON.stringify(obj)) : obj;
return Zotero.isFx ? translate._sandboxManager.copyObject(obj) : obj;
}
if(Zotero.Utilities.isEmpty(items)) {
@ -1080,13 +1099,23 @@ Zotero.Translate.Base.prototype = {
* @param {Boolean} [saveAttachments=true] Exclude attachments (e.g., snapshots) on import
*/
"translate":function(libraryID, saveAttachments) { // initialize properties specific to each translation
this._currentState = "translate";
if(!this.translator || !this.translator.length) {
this.complete(false, new Error("No translator specified"));
var args = arguments;
Zotero.debug("Translate: translate called without specifying a translator. Running detection first.");
this.setHandler('translators', function(me, translators) {
if(!translators.length) {
me.complete(false, "Could not find an appropriate translator");
} else {
me.setTranslator(translators);
Zotero.Translate.Base.prototype.translate.apply(me, args);
}
});
this.getTranslators();
return;
}
this._currentState = "translate";
this._libraryID = libraryID;
this._saveAttachments = saveAttachments === undefined || saveAttachments;
this._savingAttachments = [];
@ -1123,7 +1152,7 @@ Zotero.Translate.Base.prototype = {
// translate
try {
this._sandboxManager.sandbox["do"+this._entryFunctionSuffix].apply(null, this._getParameters());
Function.prototype.apply.call(this._sandboxManager.sandbox["do"+this._entryFunctionSuffix], null, this._getParameters());
} catch(e) {
this.complete(false, e);
return false;
@ -1396,7 +1425,7 @@ Zotero.Translate.Base.prototype = {
this.incrementAsyncProcesses("Zotero.Translate#getTranslators");
try {
var returnValue = this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix].apply(null, this._getParameters());
var returnValue = Function.prototype.apply.call(this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix], null, this._getParameters());
} catch(e) {
this.complete(false, e);
return;
@ -1451,7 +1480,11 @@ Zotero.Translate.Base.prototype = {
*/
"_generateSandbox":function() {
Zotero.debug("Translate: Binding sandbox to "+(typeof this._sandboxLocation == "object" ? this._sandboxLocation.document.location : this._sandboxLocation), 4);
this._sandboxManager = new Zotero.Translate.SandboxManager(this._sandboxLocation);
if (this._parentTranslator && this._parentTranslator._sandboxManager.newChild) {
this._sandboxManager = this._parentTranslator._sandboxManager.newChild();
} else {
this._sandboxManager = new Zotero.Translate.SandboxManager(this._sandboxLocation);
}
const createArrays = "['creators', 'notes', 'tags', 'seeAlso', 'attachments']";
var src = "var Zotero = {};"+
"Zotero.Item = function (itemType) {"+
@ -1656,7 +1689,14 @@ Zotero.Translate.Web.prototype._getSandboxLocation = function() {
/**
* Pass document and location to detect* and do* functions
*/
Zotero.Translate.Web.prototype._getParameters = function() { return [this.document, this.location]; }
Zotero.Translate.Web.prototype._getParameters = function() {
if (Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(this.document)) {
return [this._sandboxManager.wrap(Zotero.Translate.DOMWrapper.unwrap(this.document), null,
this.document.__wrapperOverrides), this.location];
} else {
return [this.document, this.location];
}
};
/**
* Prepare translation
@ -1824,7 +1864,7 @@ Zotero.Translate.Web.prototype.complete = function(returnValue, error) {
"&lastUpdated=" + encodeURIComponent(translator.lastUpdated) +
"&diagnostic=" + encodeURIComponent(info) +
"&errorData=" + encodeURIComponent(errorString);
Zotero.HTTP.doPost("http://www.zotero.org/repo/report", postBody);
Zotero.HTTP.doPost(ZOTERO_CONFIG.REPOSITORY_URL + "report", postBody);
});
}
}
@ -1927,13 +1967,13 @@ Zotero.Translate.Import.prototype._loadTranslatorPrepareIO = function(translator
if(!this._io) {
if(Zotero.Translate.IO.Read && this.location && this.location instanceof Components.interfaces.nsIFile) {
try {
this._io = new Zotero.Translate.IO.Read(this.location);
this._io = new Zotero.Translate.IO.Read(this.location, this._sandboxManager);
} catch(e) {
err = e;
}
} else {
try {
this._io = new Zotero.Translate.IO.String(this._string, this.path ? this.path : "");
this._io = new Zotero.Translate.IO.String(this._string, this.path ? this.path : "", this._sandboxManager);
} catch(e) {
err = e;
}
@ -2101,7 +2141,7 @@ Zotero.Translate.Export.prototype._prepareTranslation = function() {
// this is currently hackish since we pass null callbacks to the init function (they have
// callbacks to be consistent with import, but they are synchronous, so we ignore them)
if(!this.location) {
this._io = new Zotero.Translate.IO.String(null, this.path ? this.path : "");
this._io = new Zotero.Translate.IO.String(null, this.path ? this.path : "", this._sandboxManager);
this._io.init(configOptions["dataMode"], function() {});
} else if(!Zotero.Translate.IO.Write) {
throw new Error("Writing to files is not supported in this build of Zotero.");
@ -2115,6 +2155,19 @@ Zotero.Translate.Export.prototype._prepareTranslation = function() {
this._sandboxManager.importObject(this._io);
}
/**
* Overload Zotero.Translate.Base#translate to make sure that
* Zotero.Translate.Export#translate is not called without setting a
* translator first. Doesn't make sense to run detection for export.
*/
Zotero.Translate.Export.prototype.translate = function() {
if(!this.translator || !this.translator.length) {
this.complete(false, new Error("Export translation initiated without setting a translator"));
} else {
Zotero.Translate.Base.prototype.translate.apply(this, arguments);
}
};
/**
* Return the progress of the import operation, or null if progress cannot be determined
*/
@ -2208,7 +2261,7 @@ Zotero.Translate.Search.prototype.complete = function(returnValue, error) {
*/
Zotero.Translate.Search.prototype._getParameters = function() {
if(Zotero.isFx) {
return [this._sandboxManager._copyObject(this.search)];
return [this._sandboxManager.copyObject(this.search)];
}
return [this.search];
};
@ -2276,7 +2329,7 @@ Zotero.Translate.IO = {
/**
* @class Translate backend for translating from a string
*/
Zotero.Translate.IO.String = function(string, uri) {
Zotero.Translate.IO.String = function(string, uri, sandboxManager) {
if(string && typeof string === "string") {
this.string = string;
} else {
@ -2285,6 +2338,7 @@ Zotero.Translate.IO.String = function(string, uri) {
this.contentLength = this.string.length;
this.bytesRead = 0;
this._uri = uri;
this._sandboxManager = sandboxManager;
}
Zotero.Translate.IO.String.prototype = {
@ -2374,7 +2428,7 @@ Zotero.Translate.IO.String.prototype = {
this._xmlInvalid = true;
throw e;
}
return (Zotero.isFx ? Zotero.Translate.DOMWrapper.wrap(xml) : xml);
return (Zotero.isFx && !Zotero.isBookmarklet ? this._sandboxManager.wrap(xml) : xml);
},
"init":function(newMode, callback) {

View file

@ -49,7 +49,7 @@ Zotero.Translate.DOMWrapper = new function() {
};
function isWrapper(x) {
return isWrappable(x) && (typeof x.SpecialPowers_wrappedObject !== "undefined");
return isWrappable(x) && (typeof x.__wrappedObject !== "undefined");
};
function unwrapIfWrapped(x) {
@ -130,7 +130,7 @@ Zotero.Translate.DOMWrapper = new function() {
throw "Trying to unwrap a non-wrapped object!";
// Unwrap.
return x.SpecialPowers_wrappedObject;
return x.__wrappedObject;
};
function crawlProtoChain(obj, fn) {
@ -172,8 +172,10 @@ Zotero.Translate.DOMWrapper = new function() {
SpecialPowersHandler.prototype.doGetPropertyDescriptor = function(name, own) {
// Handle our special API.
if (name == "SpecialPowers_wrappedObject")
if (name == "__wrappedObject")
return { value: this.wrappedObject, writeable: false, configurable: false, enumerable: false };
if (name == "__wrapperOverrides")
return { value: this.overrides, writeable: false, configurable: false, enumerable: false };
// Handle __exposedProps__.
if (name == "__exposedProps__")
return { value: ExposedPropsWaiver, writable: false, configurable: false, enumerable: false };
@ -196,7 +198,7 @@ Zotero.Translate.DOMWrapper = new function() {
// Hack for overriding some properties
if (this.overrides.hasOwnProperty(name))
return this.overrides[name];
return { "enumerable": true, "value": this.overrides[name] };
// Case 1: Own Properties.
//
// This one is easy, thanks to Object.getOwnPropertyDescriptor().
@ -281,7 +283,7 @@ Zotero.Translate.DOMWrapper = new function() {
// Insert our special API. It's not enumerable, but getPropertyNames()
// includes non-enumerable properties.
var specialAPI = 'SpecialPowers_wrappedObject';
var specialAPI = '__wrappedObject';
if (props.indexOf(specialAPI) == -1)
props.push(specialAPI);
@ -366,6 +368,14 @@ Zotero.Translate.DOMWrapper = new function() {
return obj;
}
}
/**
* Wraps an object in the same sandbox as another object
*/
this.wrapIn = function(obj, insamebox) {
if(insamebox.__wrappingManager) return insamebox.__wrappingManager.wrap(obj);
return this.wrap(obj);
}
/**
* Checks whether an object is wrapped by a DOM wrapper
@ -381,7 +391,8 @@ Zotero.Translate.DOMWrapper = new function() {
* @param {String|window} sandboxLocation
*/
Zotero.Translate.SandboxManager = function(sandboxLocation) {
this.sandbox = new Components.utils.Sandbox(sandboxLocation);
// sandboxLocation = Components.classes["@mozilla.org/systemprincipal;1"].createInstance(Components.interfaces.nsIPrincipal);
var sandbox = this.sandbox = new Components.utils.Sandbox(sandboxLocation, {wantComponents:false, wantGlobalProperties:["XMLHttpRequest"]});
this.sandbox.Zotero = {};
// import functions missing from global scope into Fx sandbox
@ -389,28 +400,14 @@ Zotero.Translate.SandboxManager = function(sandboxLocation) {
if(typeof sandboxLocation === "object" && "DOMParser" in sandboxLocation) {
this.sandbox.DOMParser = sandboxLocation.DOMParser;
} else {
var sandbox = this.sandbox;
this.sandbox.DOMParser = function() {
var uri, principal;
// get URI
if(typeof sandboxLocation === "string") { // if sandbox specified by URI
var secMan = Services.scriptSecurityManager;
uri = Services.io.newURI(sandboxLocation, "UTF-8", null);
principal = (secMan.getCodebasePrincipal || secMan.getSimpleCodebasePrincipal)(uri);
} else { // if sandbox specified by DOM document
principal = sandboxLocation.document.nodePrincipal;
uri = sandboxLocation.document.documentURIObject;
}
// initialize DOM parser
var _DOMParser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
.createInstance(Components.interfaces.nsIDOMParser);
_DOMParser.init(principal, uri, uri);
// expose parseFromString
this.__exposedProps__ = {"parseFromString":"r"};
this.parseFromString = function(str, contentType) {
return Zotero.Translate.DOMWrapper.wrap(_DOMParser.parseFromString(str, contentType));
var xhr = sandbox.XMLHttpRequest();
xhr.open("GET", "data:"+contentType+";charset=utf-8,"+encodeURIComponent(str), false);
xhr.send();
if (!xhr.responseXML) throw new Error("error parsing XML");
return xhr.responseXML;
}
};
}
@ -425,6 +422,58 @@ Zotero.Translate.SandboxManager = function(sandboxLocation) {
};
this.sandbox.XMLSerializer.__exposedProps__ = {"prototype":"r"};
this.sandbox.XMLSerializer.prototype = {"__exposedProps__":{"serializeToString":"r"}};
var expr = "(function(x) { return function() { this.args = arguments; return Function.prototype.apply.call(x, this); }.bind({}); })";
this._makeContentForwarder = Components.utils.evalInSandbox(expr, sandbox);
if (Zotero.platformMajorVersion >= 35) {
var _proxy = Components.utils.evalInSandbox('(function (target, x, overrides) {'+
' return new Proxy(x, ProxyHandler(target, overrides));'+
'})', sandbox);
var wrap = this.wrap = function(target, x, overrides) {
if (target === null || (typeof target !== "object" && typeof target !== "function")) return target;
if (!x) x = new sandbox.Object();
return _proxy(target, x, overrides);
};
var me = this;
sandbox.ProxyHandler = this._makeContentForwarder(function() {
var target = (this.args.wrappedJSObject || this.args)[0];
var overrides = (this.args.wrappedJSObject || this.args)[1] || {};
if(target instanceof Components.interfaces.nsISupports) {
target = new XPCNativeWrapper(target);
}
var ret = new sandbox.Object();
ret.wrappedJSObject.has = function(x, prop) {
return overrides.hasOwnProperty(prop) || prop in target;
};
ret.wrappedJSObject.get = function(x, prop, receiver) {
if (prop === "__wrappedObject") return target;
if (prop === "__wrappingManager") return me;
var y = overrides.hasOwnProperty(prop) ? overrides[prop] : target[prop];
if (y === null || (typeof y !== "object" && typeof y !== "function")) return y;
return wrap(y, typeof y === "function" ? function() {
var args = Array.prototype.slice.apply(arguments);
for (var i = 0; i < args.length; i++) {
if (typeof args[i] === "object" && args[i] !== null &&
args[i].wrappedJSObject && args[i].wrappedJSObject.__wrappedObject)
args[i] = new XPCNativeWrapper(args[i].wrappedJSObject.__wrappedObject);
}
return wrap(y.apply(target, args));
} : new sandbox.Object());
};
ret.wrappedJSObject.ownKeys = function(x) {
return Components.utils.cloneInto(target.getOwnPropertyNames(), sandbox);
};
ret.wrappedJSObject.enumerate = function(x) {
var y = new sandbox.Array();
for (var i in target) y.wrappedJSObject.push(i);
return y;
};
return ret;
});
} else {
this.wrap = Zotero.Translate.DOMWrapper.wrap;
}
}
Zotero.Translate.SandboxManager.prototype = {
@ -447,9 +496,7 @@ Zotero.Translate.SandboxManager.prototype = {
"importObject":function(object, passAsFirstArgument, attachTo) {
if(!attachTo) attachTo = this.sandbox.Zotero;
if(attachTo.wrappedJSObject) attachTo = attachTo.wrappedJSObject;
var newExposedProps = false,
sandbox = this.sandbox,
me = this;
var newExposedProps = false, sandbox = this.sandbox, me = this;
if(!object.__exposedProps__) newExposedProps = {};
for(var key in (newExposedProps ? object : object.__exposedProps__)) {
let localKey = key;
@ -460,13 +507,27 @@ Zotero.Translate.SandboxManager.prototype = {
var isObject = typeof object[localKey] === "object";
if(isFunction || isObject) {
if(isFunction) {
attachTo[localKey] = function() {
var args = Array.prototype.slice.apply(arguments);
if(passAsFirstArgument) args.unshift(passAsFirstArgument);
return me._copyObject(object[localKey].apply(object, args));
};
if (Zotero.platformMajorVersion >= 33) {
attachTo[localKey] = this._makeContentForwarder(function() {
var args = Array.prototype.slice.apply(this.args.wrappedJSObject || this.args);
for(var i = 0; i<args.length; i++) {
// Make sure we keep XPCNativeWrappers
if(args[i] instanceof Components.interfaces.nsISupports) {
args[i] = new XPCNativeWrapper(args[i]);
}
}
if(passAsFirstArgument) args.unshift(passAsFirstArgument);
return me.copyObject(object[localKey].apply(object, args));
});
} else {
attachTo[localKey] = function() {
var args = Array.prototype.slice.apply(arguments);
if(passAsFirstArgument) args.unshift(passAsFirstArgument);
return me.copyObject(object[localKey].apply(object, args));
};
}
} else {
attachTo[localKey] = {};
attachTo[localKey] = new sandbox.Object();
}
// attach members
@ -477,7 +538,7 @@ Zotero.Translate.SandboxManager.prototype = {
attachTo[localKey] = object[localKey];
}
}
if(newExposedProps) {
attachTo.__exposedProps__ = newExposedProps;
} else {
@ -488,7 +549,7 @@ Zotero.Translate.SandboxManager.prototype = {
"_canCopy":function(obj) {
if(typeof obj !== "object" || obj === null) return false;
if((obj.constructor.name !== "Object" && obj.constructor.name !== "Array") ||
"__exposedProps__" in obj) {
"__exposedProps__" in obj || (obj.wrappedJSObject && obj.wrappedJSObject.__wrappingManager)) {
return false;
}
return true;
@ -499,8 +560,8 @@ Zotero.Translate.SandboxManager.prototype = {
* @param {Object} obj
* @return {Object}
*/
"_copyObject":function(obj, wm) {
if(!this._canCopy(obj)) return obj
"copyObject":function(obj, wm) {
if(!this._canCopy(obj)) return obj;
if(!wm) wm = new WeakMap();
var obj2 = (obj.constructor.name === "Array" ? this.sandbox.Array() : this.sandbox.Object());
var wobj2 = obj2.wrappedJSObject ? obj2.wrappedJSObject : obj2;
@ -511,7 +572,7 @@ Zotero.Translate.SandboxManager.prototype = {
if(this._canCopy(prop1)) {
var prop2 = wm.get(prop1);
if(prop2 === undefined) {
prop2 = this._copyObject(prop1, wm);
prop2 = this.copyObject(prop1, wm);
wm.set(prop1, prop2);
}
wobj2[i] = prop2;
@ -520,6 +581,56 @@ Zotero.Translate.SandboxManager.prototype = {
}
}
return obj2;
},
"newChild":function() {
return new Zotero.Translate.ChildSandboxManager(this);
}
}
Zotero.Translate.ChildSandboxManager = function(parent) {
this._wrappedSandbox = new parent.sandbox.Object();
this._wrappedSandbox.Zotero = new parent.sandbox.Object();
this.sandbox = this._wrappedSandbox.wrappedJSObject || this._wrappedSandbox;
this._parent = parent;
}
Zotero.Translate.ChildSandboxManager.prototype = {
"eval":function(code, functions, path) {
// eval in sandbox scope
if(functions) {
for(var i = 0; i < functions.length; i++) {
delete this.sandbox[functions[i]];
}
}
this._parent.sandbox._withSandbox = this._wrappedSandbox;
Components.utils.evalInSandbox("with(_withSandbox){"+code+"};", this._parent.sandbox, "1.8", path, 1);
if(functions) {
for(var i = 0; i < functions.length; i++) {
try {
this._wrappedSandbox[functions[i]] = Components.utils.evalInSandbox(functions[i], this._parent.sandbox);
} catch(e) {}
}
}
this._parent.sandbox._withSandbox = undefined;
},
"importObject":function(object, passAsFirstArgument, attachTo) {
if(!attachTo) attachTo = this.sandbox.Zotero;
// Zotero.debug(object);
// Zotero.debug(attachTo);
this._parent.importObject(object, passAsFirstArgument, attachTo);
// Zotero.debug(attachTo);
},
"copyObject":function(obj) {
return this._parent.copyObject(obj);
},
"newChild":function() {
return this._parent.newChild();
},
"_makeContentForwarder":function(f) {
return this._parent._makeContentForwarder(f);
},
"wrap":function(x) {
return this._parent.wrap(x);
}
}
@ -532,10 +643,11 @@ Zotero.Translate.IO.maintainedInstances = [];
/******* (Native) Read support *******/
Zotero.Translate.IO.Read = function(file, mode) {
Zotero.Translate.IO.Read = function(file, sandboxManager) {
Zotero.Translate.IO.maintainedInstances.push(this);
this.file = file;
this._sandboxManager = sandboxManager;
// open file
this._openRawStream();
@ -800,7 +912,7 @@ Zotero.Translate.IO.Read.prototype = {
this._xmlInvalid = true;
throw e;
}
return (Zotero.isFx ? Zotero.Translate.DOMWrapper.wrap(xml) : xml);
return (Zotero.isFx ? this._sandboxManager.wrap(xml) : xml);
},
"init":function(newMode, callback) {

View file

@ -217,29 +217,42 @@ Zotero.Translate.ItemSaver.prototype = {
},
"_saveAttachmentFile": Zotero.Promise.coroutine(function* (attachment, parentID, attachmentCallback) {
const urlRe = /(([a-z][-+\.a-z0-9]*):\/\/[^\s]*)/i; //according to RFC3986
Zotero.debug("Translate: Adding attachment", 4);
if(!attachment.url && !attachment.path) {
Zotero.debug("Translate: Ignoring attachment: no path or URL specified", 2);
let e = "Translate: Ignoring attachment: no path or URL specified";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
}
if(!attachment.path) {
let url = Zotero.Attachments.cleanAttachmentURI(attachment.url);
if (!url) {
let e = "Translate: Invalid attachment URL specified <" + attachment.url + ">";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
}
attachment.url = url;
url = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService)
.newURI(url, null, null); // This cannot fail, since we check above
// see if this is actually a file URL
var m = urlRe.exec(attachment.url);
var protocol = m ? m[2].toLowerCase() : "file";
if(protocol == "file") {
if(url.scheme == "file") {
attachment.path = attachment.url;
attachment.url = false;
} else if(protocol != "http" && protocol != "https") {
Zotero.debug("Translate: Unrecognized protocol "+protocol, 2);
} else if(url.scheme != "http" && url.scheme != "https") {
let e = "Translate: " + url.scheme + " protocol is not allowed for attachments from translators.";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
}
}
if(!attachment.path) {
// create from URL
// At this point, must be a valid HTTP/HTTPS url
attachment.linkMode = "linked_file";
var newItem = yield Zotero.Attachments.linkFromURL({
url: attachment.url,
@ -408,9 +421,10 @@ Zotero.Translate.ItemSaver.prototype = {
}
}
var doc = undefined;
if(attachment.document) {
attachment.document = Zotero.Translate.DOMWrapper.unwrap(attachment.document);
if(!attachment.title) attachment.title = attachment.document.title;
doc = new XPCNativeWrapper(Zotero.Translate.DOMWrapper.unwrap(attachment.document));
if(!attachment.title) attachment.title = doc.title;
}
var title = attachment.title || null;
if(!title) {
@ -456,6 +470,7 @@ Zotero.Translate.ItemSaver.prototype = {
return true;
}
return true;
} else {
// if snapshot is not explicitly set to false, retrieve snapshot
if(attachment.document) {

View file

@ -229,7 +229,7 @@ Zotero.Utilities = {
*/
"trimInternal":function(/**String*/ s) {
if (typeof(s) != "string") {
throw "trimInternal: argument must be a string";
throw new Error("trimInternal: argument must be a string");
}
s = s.replace(/[\xA0\r\n\s]+/g, " ");
@ -1118,11 +1118,11 @@ Zotero.Utilities = {
// For some reason, if elements is wrapped by an object
// Xray, we won't be able to unwrap the DOMWrapper around
// the element. So waive the object Xray.
var element = elements.wrappedJSObject ? elements.wrappedJSObject[i] : elements[i];
var maybeWrappedEl = elements.wrappedJSObject ? elements.wrappedJSObject[i] : elements[i];
// Firefox 5 hack, so we will preserve Fx5DOMWrappers
var isWrapped = Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(element);
if(isWrapped) element = Zotero.Translate.DOMWrapper.unwrap(element);
var isWrapped = Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(maybeWrappedEl);
var element = isWrapped ? Zotero.Translate.DOMWrapper.unwrap(maybeWrappedEl) : maybeWrappedEl;
// We waived the object Xray above, which will waive the
// DOM Xray, so make sure we have a DOM Xray wrapper.
@ -1155,7 +1155,7 @@ Zotero.Utilities = {
var newEl;
while(newEl = xpathObject.iterateNext()) {
// Firefox 5 hack
results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrap(newEl) : newEl);
results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrapIn(newEl, maybeWrappedEl) : newEl);
}
} else if("selectNodes" in element) {
// We use JavaScript-XPath in IE for HTML documents, but with an XML
@ -1197,6 +1197,8 @@ Zotero.Utilities = {
var strings = new Array(elements.length);
for(var i=0, n=elements.length; i<n; i++) {
var el = elements[i];
if(el.wrappedJSObject) el = el.wrappedJSObject;
if(Zotero.Translate.DOMWrapper) el = Zotero.Translate.DOMWrapper.unwrap(el);
strings[i] =
(el.nodeType === 2 /*ATTRIBUTE_NODE*/ && "value" in el) ? el.value
: "textContent" in el ? el.textContent
@ -1231,96 +1233,133 @@ Zotero.Utilities = {
*
* Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
*/
"varDump":function(arr,level,maxLevel,parentObjects,path) {
var dumped_text = "";
if (level === undefined){
"varDump": function(obj,level,maxLevel,parentObjects,path) {
// Simple dump
var type = typeof obj;
if (type == 'number' || type == 'undefined' || type == 'boolean' || obj === null) {
if (!level) {
// When dumping these directly, make sure to distinguish them from regular
// strings as output by Zotero.debug (i.e. no quotes)
return '===>' + obj + '<=== (' + type + ')';
}
else {
return '' + obj;
}
}
else if (type == 'string') {
return JSON.stringify(obj);
}
else if (type == 'function') {
var funcStr = ('' + obj).trim();
if (!level) {
// Dump function contents as well if only dumping function
return funcStr;
}
// Display [native code] label for native functions, but make it one line
if (/^[^{]+{\s*\[native code\]\s*}$/i.test(funcStr)) {
return funcStr.replace(/\s*(\[native code\])\s*/i, ' $1 ');
}
// For non-native functions, display an elipsis
return ('' + obj).replace(/{[\s\S]*}/, '{...}');
}
else if (type != 'object') {
return '<<Unknown type: ' + type + '>> ' + obj;
}
// More complex dump with indentation for objects
if (level === undefined) {
level = 0;
}
if (maxLevel === undefined) {
maxLevel = 5;
}
// The padding given at the beginning of the line.
var level_padding = "";
for (var j=0;j<level+1;j++){
level_padding += " ";
}
if (level > maxLevel){
return dumped_text + level_padding + "<<Maximum depth reached>>...\n";
var objType = Object.prototype.toString.call(obj);
if (level > maxLevel) {
return objType + " <<Maximum depth reached>>";
}
if (typeof(arr) == 'object') { // Array/Hashes/Objects
var isRequest = Zotero.isFx && !Zotero.isBookmarklet
&& arr instanceof Components.interfaces.nsIRequest;
//array for checking recursion
//initialise at first itteration
if(!parentObjects) {
parentObjects = [arr];
path = ['ROOT'];
// The padding given at the beginning of the line.
var level_padding = "";
for (var j=0; j<level+1; j++) {
level_padding += " ";
}
//Special handling for Error
var isError = obj instanceof Error;
if (!isError && obj.constructor) {
switch (obj.constructor.name) {
case 'Error':
case 'EvalError':
case 'RangeError':
case 'ReferenceError':
case 'SyntaxError':
case 'TypeError':
case 'URIError':
isError = true;
}
for (var item in arr) {
try {
// Don't display nsIRequest.name, which can contain password
if (isRequest && item == 'name') {
dumped_text += level_padding + "'" + item + "' => <<Skipped>>\n";
continue;
}
var value = arr[item];
} catch(e) {
dumped_text += level_padding + "'" + item + "' => <<Access Denied>>\n";
}
if (isError) {
return (obj.constructor.name ? obj.constructor.name : 'Error') + ': '
+ (obj.message ? ('' + obj.message).replace(/^/gm, level_padding).trim() : '')
+ '\n' + level_padding + "===== Stack Trace =====\n"
+ (obj.stack ? obj.stack.trim().replace(/^(?=.)/gm, level_padding) : '')
+ '\n' + level_padding + "=======================";
}
// Only dump single level for nsIDOMNode objects (including document)
if (Zotero.isFx && !Zotero.isBookmarklet
&& obj instanceof Components.interfaces.nsIDOMNode
) {
level = maxLevel;
}
// Recursion checking
if(!parentObjects) {
parentObjects = [obj];
path = ['ROOT'];
}
var isArray = objType == '[object Array]'
var dumpedText = isArray ? '[' : objType + ' {';
for (var prop in obj) {
dumpedText += '\n' + level_padding + JSON.stringify(prop) + ": ";
try {
var value = obj[prop];
} catch(e) {
dumpedText += "<<Access Denied>>";
continue;
}
// Check for recursion
if (typeof(value) == 'object') {
var i = parentObjects.indexOf(value);
if(i != -1) {
var parentName = path.slice(0,i+1).join('->');
dumpedText += "<<Reference to parent object " + parentName + " >>";
continue;
}
if (typeof(value) == 'object') { // If it is an array
//check for recursion
var i = parentObjects.indexOf(value);
if(i != -1) {
var parentName = path.slice(0,i+1).join('->');
dumped_text += level_padding + "'" + item + "' => <<Reference to parent object " + parentName + " >>\n";
continue;
}
var openBrace = '{', closeBrace = '}';
var type = Object.prototype.toString.call(value);
if(type == '[object Array]') {
openBrace = '[';
closeBrace = ']';
}
dumped_text += level_padding + "'" + item + "' => " + type + ' ' + openBrace;
//only recurse if there's anything in the object, purely cosmetical
try {
for(var i in value) {
dumped_text += "\n" + Zotero.Utilities.varDump(value,level+1,maxLevel,parentObjects.concat([value]),path.concat([item])) + level_padding;
break;
}
} catch(e) {
dumped_text += "<<Error processing object:\n" + e + ">>\n";
}
dumped_text += closeBrace + "\n";
}
else {
if (typeof value == 'function'){
dumped_text += level_padding + "'" + item + "' => function(...){...} \n";
}
else if (typeof value == 'number') {
dumped_text += level_padding + "'" + item + "' => " + value + "\n";
}
else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
}
}
}
try {
dumpedText += Zotero.Utilities.varDump(value,level+1,maxLevel,parentObjects.concat([value]),path.concat([prop]));
} catch(e) {
dumpedText += "<<Error processing property: " + e.message + " (" + value + ")>>";
}
}
else { // Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
var lastChar = dumpedText.charAt(dumpedText.length - 1);
if (lastChar != '[' && lastChar != '{') {
dumpedText += '\n' + level_padding.substr(4);
}
return dumped_text;
dumpedText += isArray ? ']' : '}';
return dumpedText;
},
/**

View file

@ -222,6 +222,23 @@ Zotero.Utilities.Internal = {
},
/**
* Return the byte length of a UTF-8 string
*
* http://stackoverflow.com/a/23329386
*/
byteLength: function (str) {
var s = str.length;
for (var i=str.length-1; i>=0; i--) {
var code = str.charCodeAt(i);
if (code > 0x7f && code <= 0x7ff) s++;
else if (code > 0x7ff && code <= 0xffff) s+=2;
if (code >= 0xDC00 && code <= 0xDFFF) i--; //trail surrogate
}
return s;
},
/**
* Display a prompt from an error with custom buttons and a callback
*/

View file

@ -268,9 +268,9 @@ Zotero.Utilities.Translate.prototype.processDocuments = function(urls, processor
if(!processor) return;
var newLoc = doc.location;
if(Zotero.isFx && (protocol != newLoc.protocol || host != newLoc.host)) {
if(Zotero.isFx && !Zotero.isBookmarklet && (protocol != newLoc.protocol || host != newLoc.host)) {
// Cross-site; need to wrap
processor(Zotero.Translate.DOMWrapper.wrap(doc), newLoc.toString());
processor(translate._sandboxManager.wrap(doc), newLoc.toString());
} else {
// Not cross-site; no need to wrap
processor(doc, newLoc.toString());

View file

@ -23,24 +23,8 @@
***** END LICENSE BLOCK *****
*/
const ZOTERO_CONFIG = {
GUID: 'zotero@chnm.gmu.edu',
REPOSITORY_URL: 'https://repo.zotero.org/repo',
REPOSITORY_CHECK_INTERVAL: 86400, // 24 hours
REPOSITORY_RETRY_INTERVAL: 3600, // 1 hour
BASE_URI: 'http://zotero.org/',
WWW_BASE_URL: 'http://www.zotero.org/',
PROXY_AUTH_URL: 'http://zotero.org.s3.amazonaws.com/proxy-auth',
SYNC_URL: 'https://sync.zotero.org/',
API_URL: 'https://api.zotero.org/',
API_VERSION: 2,
PREF_BRANCH: 'extensions.zotero.',
BOOKMARKLET_ORIGIN : 'https://www.zotero.org',
HTTP_BOOKMARKLET_ORIGIN : 'http://www.zotero.org',
BOOKMARKLET_URL: 'https://www.zotero.org/bookmarklet/'
};
// Commonly used imports accessible anywhere
Components.utils.import("resource://zotero/config.js");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/osfile.jsm");
@ -61,7 +45,6 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
this.logError = logError;
this.getErrors = getErrors;
this.getSystemInfo = getSystemInfo;
this.safeDebug = safeDebug;
this.getString = getString;
this.localeJoin = localeJoin;
this.setFontSize = setFontSize;
@ -1262,10 +1245,11 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
}
/**
* Log a JS error to the Mozilla JS error console and the text console
* Log a JS error to the Mozilla error console and debug output
* @param {Exception} err
*/
function logError(err) {
Zotero.debug(err, 1);
log(err.message ? err.message : err.toString(), "error",
err.fileName ? err.fileName : (err.filename ? err.filename : null), null,
err.lineNumber ? err.lineNumber : null, null);
@ -1362,22 +1346,6 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
AddonManager.getAllAddons(onHaveInstalledAddons);
}
function safeDebug(obj){
for (var i in obj){
try {
Zotero.debug(i + ': ' + obj[i]);
}
catch (e){
try {
Zotero.debug(i + ': ERROR');
}
catch (e){}
}
}
}
function getString(name, params){
try {
if (params != undefined){
@ -1391,6 +1359,13 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
}
}
catch (e){
if (e.name == 'NS_ERROR_ILLEGAL_VALUE') {
Zotero.debug(params, 1);
}
else if (e.name != 'NS_ERROR_FAILURE') {
Components.utils.reportError(e);
Zotero.debug(e, 1);
}
throw ('Localized string not available for ' + name);
}
return l10n;
@ -2692,6 +2667,9 @@ Zotero.DragDrop = {
return false;
}
var win = sourceNode.ownerDocument.defaultView;
if (win.document.documentElement.getAttribute('windowtype') == 'zotero:search') {
return win.ZoteroAdvancedSearch.itemsView.collectionTreeRow;
}
return win.ZoteroPane.collectionsView.selectedTreeRow;
}
else {

View file

@ -102,6 +102,12 @@ var ZoteroPane = new function()
document.getElementById('zotero-pane-stack').setAttribute('platform', 'win');
}
// Use pre-Yosemite search fields before Fx34
// See note in chrome/content/zotero-platform/mac/overlay.css
if (Zotero.isMac && Zotero.platformMajorVersion < 34 && Zotero.oscpu.contains(' 10.10')) {
document.getElementById('zotero-pane-stack').setAttribute('oldsearchfield', 'true')
}
// register an observer for Zotero reload
observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
@ -575,7 +581,7 @@ var ZoteroPane = new function()
}
else if ((event.keyCode == event.DOM_VK_BACK_SPACE && Zotero.isMac) ||
event.keyCode == event.DOM_VK_DELETE) {
// If Cmd/Ctrl delete, use forced mode, which does different
// If Cmd/Shift delete, use forced mode, which does different
// things depending on the context
var force = event.metaKey || (!Zotero.isMac && event.shiftKey);
ZoteroPane_Local.deleteSelectedItems(force);
@ -3137,21 +3143,15 @@ var ZoteroPane = new function()
this.displayCannotEditLibraryMessage();
return;
}
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
var input = {};
var check = {value : false};
// TODO: Allow title to be specified?
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
var io = {};
window.openDialog('chrome://zotero/content/attachLink.xul',
'zotero-attach-uri-dialog', 'centerscreen, modal', io);
if (!io.out) return;
return Zotero.Attachments.linkFromURL({
url: input.value,
parentItemID: itemID
url: io.out.link,
parentItemID: itemID,
title: io.out.title
});
});
@ -4211,18 +4211,51 @@ var ZoteroPane = new function()
*/
this.updateToolbarPosition = function() {
if(document.getElementById("zotero-pane-stack").hidden) return;
const PANES = ["collections", "items"];
for each(var paneName in PANES) {
var pane = document.getElementById("zotero-"+paneName+"-pane");
var splitter = document.getElementById("zotero-"+paneName+"-splitter");
var toolbar = document.getElementById("zotero-"+paneName+"-toolbar");
var paneComputedStyle = window.getComputedStyle(pane, null);
var splitterComputedStyle = window.getComputedStyle(splitter, null);
toolbar.style.width = paneComputedStyle.getPropertyValue("width");
toolbar.style.marginRight = splitterComputedStyle.getPropertyValue("width");
var collectionsPane = document.getElementById("zotero-collections-pane");
var collectionsToolbar = document.getElementById("zotero-collections-toolbar");
var collectionsSplitter = document.getElementById("zotero-collections-splitter");
var itemsPane = document.getElementById("zotero-items-pane");
var itemsToolbar = document.getElementById("zotero-items-toolbar");
var itemsSplitter = document.getElementById("zotero-items-splitter");
var itemPane = document.getElementById("zotero-item-pane");
var itemToolbar = document.getElementById("zotero-item-toolbar");
var collectionsPaneComputedStyle = window.getComputedStyle(collectionsPane, null);
var collectionsSplitterComputedStyle = window.getComputedStyle(collectionsSplitter, null);
var itemsPaneComputedStyle = window.getComputedStyle(itemsPane, null);
var itemsSplitterComputedStyle = window.getComputedStyle(itemsSplitter, null);
var itemPaneComputedStyle = window.getComputedStyle(itemPane, null);
var collectionsPaneWidth = collectionsPaneComputedStyle.getPropertyValue("width");
var collectionsSplitterWidth = collectionsSplitterComputedStyle.getPropertyValue("width");
var itemsPaneWidth = itemsPaneComputedStyle.getPropertyValue("width");
var itemsSplitterWidth = itemsSplitterComputedStyle.getPropertyValue("width");
var itemPaneWidth = itemPaneComputedStyle.getPropertyValue("width");
collectionsToolbar.style.width = collectionsPaneWidth;
collectionsToolbar.style.marginRight = collectionsSplitterWidth;
itemsToolbar.style.marginRight = itemsSplitterWidth;
var itemsToolbarWidthNumber = parseInt(itemsPaneWidth, 10);
if (collectionsPane.collapsed) {
var collectionsToolbarComputedStyle = window.getComputedStyle(collectionsToolbar, null);
var collectionsToolbarWidth = collectionsToolbarComputedStyle.getPropertyValue("width");// real width (nonzero) after the new definition
itemsToolbarWidthNumber = itemsToolbarWidthNumber-parseInt(collectionsToolbarWidth, 10);
}
if (itemPane.collapsed) {
// Then the itemsToolbar and itemToolbar share the same space, and it seems best to use some flex attribute from right (because there might be other icons appearing or vanishing).
itemsToolbar.style.removeProperty('width');
itemsToolbar.setAttribute("flex", "1");
itemToolbar.setAttribute("flex", "0");
} else {
itemsToolbar.style.width = itemsToolbarWidthNumber + "px";
itemsToolbar.setAttribute("flex", "0");
itemToolbar.setAttribute("flex", "1");
}
}
/**

View file

@ -175,7 +175,7 @@
<menuitem class="menuitem-iconic zotero-menuitem-attachments-web-link standalone-no-display" label="&zotero.items.menu.attach.link;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromPage(true, itemID)"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-web-link" label="&zotero.items.menu.attach.link.uri;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromURI(true, itemID);"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-file" label="&zotero.items.menu.attach.file;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(false, itemID);"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-link" label="&zotero.items.menu.attach.fileLink;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(true, itemID);"/>
<menuitem class="menuitem-iconic zotero-menuitem-attachments-link" label="&zotero.items.menu.attach.fileLink;" oncommand="var itemID = ZoteroPane_Local.getSelectedItems()[0].id; ZoteroPane_Local.addAttachmentFromDialog(true, itemID);" id="zotero-tb-attachment-add-file-link"/>
</menupopup>
</toolbarbutton>
<toolbarseparator/>
@ -538,9 +538,11 @@
</deck>
</vbox>
<splitter id="zotero-items-splitter" resizebefore="closest" resizeafter="closest"
<splitter id="zotero-items-splitter" resizebefore="closest" resizeafter="closest" collapse="after" zotero-persist="state"
onmousemove="ZoteroPane_Local.updateToolbarPosition()"
oncommand="ZoteroPane_Local.updateToolbarPosition()"/>
oncommand="ZoteroPane_Local.updateToolbarPosition()">
<grippy id="zotero-items-grippy"/>
</splitter>
<!-- itemPane.xul -->
<vbox id="zotero-item-pane"/>

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Loading items list...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
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?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "احفظ في زوتيرو">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=تحميل قائمة العناصر...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=نقل لسلة المحذوفات
pane.items.trash=هل ترغب في نقل العنصر المحدد إلى سلة المحذوفات؟
pane.items.trash.multiple=هل ترغب في نقل العناصر المحددة إلى سلة المحذوفات؟

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Зарежда списъка на записите...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Премества в кошчето за боклук
pane.items.trash=Сигурни ли сте, че искате да преместите избраният запис в кошчето за боклук?
pane.items.trash.multiple=Сигурни ли сте, че искате да преместите избраните записи в кошчето за боклук?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Desa al Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Els adjunts no es poden desar a la biblioteca seleccionada. Aquest element es desarà a la biblioteca.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Per utilitzar aquesta funció, primer cal instal·lar les eines de PDF en les preferències del Zotero.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -83,7 +83,7 @@ errorReport.reportErrors=Notifica errors...
errorReport.reportInstructions=Podeu notificar aquest error seleccionat "%S" des del menú Accions (engranatge)
errorReport.followingReportWillBeSubmitted=The following report will be submitted:
errorReport.noErrorsLogged=No errors have been logged since %S started.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers.
errorReport.advanceMessage=Premeu %S per enviar un informe als desenvolupadors de Zotero.
errorReport.stepsToReproduce=Passos per a reproduir-lo:
errorReport.expectedResult=Resultat esperat:
errorReport.actualResult=Resultat real:
@ -195,8 +195,8 @@ tagColorChooser.maxTags=Fins a %S etiquetes de cada biblioteca poden tenir color
pane.items.loading=Carregant la llista d'elements...
pane.items.columnChooser.moreColumns=Més columnes
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Mou a la paperera
pane.items.trash=Segur que voleu moure l'element seleccionat a la paperera?
pane.items.trash.multiple=Segur que voleu moure els elements seleccionats a la paperera?

View file

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Jméno:">
<!ENTITY zotero.search.searchInLibrary "Search in library:">
<!ENTITY zotero.search.searchInLibrary "Hledat v knihovně:">
<!ENTITY zotero.search.joinMode.prefix "Odpovídá">
<!ENTITY zotero.search.joinMode.any "některému">

View file

@ -8,7 +8,7 @@
<!ENTITY zotero.general.cancel "Zrušit">
<!ENTITY zotero.errorReport.title "Chybová zpráva Zotera">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero.">
<!ENTITY zotero.errorReport.unrelatedMessages "Může obsahovat zprávy nesouvisející se Zoterem.">
<!ENTITY zotero.errorReport.submissionInProgress "Čekejte, prosím, dokud nebude zpráva o chybách odeslána.">
<!ENTITY zotero.errorReport.submitted "Zpráva o chybách byla odeslána.">
<!ENTITY zotero.errorReport.reportID "ID hlášení:">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Zobrazit sjednocené položky">
<!ENTITY zotero.items.itemType "Typ položky">
<!ENTITY zotero.items.type_column "Item Type">
<!ENTITY zotero.items.type_column "Typ položky">
<!ENTITY zotero.items.title_column "Název">
<!ENTITY zotero.items.creator_column "Tvůrce">
<!ENTITY zotero.items.date_column "Datum">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Uložit do Zotera">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Do zvolené knihovny nemohou být uloženy přílohy. Tato položka bude místo toho uložena do vaší knihovny.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Pokud chcete využít této funkce, musíte nejdříve v nastavení Zotera nainstalovat nástroje pro práci s PDF.">
<!ENTITY zotero.attachLink.title "Připojit odkaz na URI">
<!ENTITY zotero.attachLink.label.link "Odkaz:">
<!ENTITY zotero.attachLink.label.title "Název:">

View file

@ -81,9 +81,9 @@ upgrade.couldNotMigrate.restart=Pokud se tato zpráva objevuje opakovaně, resta
errorReport.reportError=Zpráva o chybě...
errorReport.reportErrors=Nahlásit chyby...
errorReport.reportInstructions=Můžete nahlásit tuto chybu volbou "%S" z menu Akce (ozubené kolečko).
errorReport.followingReportWillBeSubmitted=The following report will be submitted:
errorReport.noErrorsLogged=No errors have been logged since %S started.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers.
errorReport.followingReportWillBeSubmitted=Bude odeslána následující zpráva:
errorReport.noErrorsLogged=Od spuštění %S nebyly zalogovány žádné chyby.
errorReport.advanceMessage=Stisknutím %S odešlete zprávu vývojářům Zotera.
errorReport.stepsToReproduce=Kroky k zopakování:
errorReport.expectedResult=Očekávaný výsledek:
errorReport.actualResult=Dosažený výsledek:
@ -193,10 +193,10 @@ tagColorChooser.numberKeyInstructions=Stisknutím klávesy $NUMBER můžete při
tagColorChooser.maxTags=Barvy může mít přiřazeno až %S štítků v každé knihovně.
pane.items.loading=Nahrávám seznam položek...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Připojit odkaz k URI
pane.items.attach.link.uri=Vložte URI:
pane.items.columnChooser.moreColumns=Více sloupců
pane.items.columnChooser.secondarySort=Sekundární řazení (%S)
pane.items.attach.link.uri.unrecognized=Zotero nerozeznalo URI, kterou jste zadali. Prosím zkontrolujte adresu a zkuste to znovu.
pane.items.attach.link.uri.file=Odkaz můžete připojit k souboru pomocí "%S".
pane.items.trash.title=Přesunout do Koše
pane.items.trash=Jste si jisti, že chcete přesunout vybranou položku do Koše?
pane.items.trash.multiple=Jste si jisti, že chcete přesunout vybranou položku do Koše?
@ -483,7 +483,7 @@ ingester.scrapingTo=Ukládám do
ingester.scrapeComplete=Položka uložena
ingester.scrapeError=Nebylo možné uložit položku
ingester.scrapeErrorDescription=Při ukládání této položky nastala chyba. Zkontrolujte %S pro více informací.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues
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.importReferRISDialog.title=Import RIS/Refer do Zotera
@ -966,5 +966,5 @@ firstRunGuidance.saveIcon=Zotero rozpoznalo na této stránce citaci. Pro její
firstRunGuidance.authorMenu=Zotero umožňuje zvolit i editory a překladatele. Volbou v tomto menu můžete změnit autora na editora či překladatele.
firstRunGuidance.quickFormat=Napište název, nebo autora k nimž hledáte citaci.\n\n Když si vyberete, kliknutím na bublinu, nebo stiskem Ctrl-\u2193 můžete přidat čísla stran, prefixy, či sufixy. Číslo stránky můžete vložit přímo k vašim vyhledávaným výrazům.\n\nCitace můžete editovat přímo ve vašem textovém procesoru.
firstRunGuidance.quickFormatMac=Napište název, nebo autora k nimž hledáte citaci.\n\n Když si vyberete, kliknutím na bublinu, nebo stiskem Ctrl-\u2193 můžete přidat čísla stran, prefixy, či sufixy. Číslo stránky můžete vložit přímo k vašim vyhledávaným výrazům.\n\nCitace můžete editovat přímo ve vašem textovém procesoru.
firstRunGuidance.toolbarButton.new=Click here 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.toolbarButton.new=Zotero otevřete kliknutím sem, nebo použitím klávesové zkratky %S
firstRunGuidance.toolbarButton.upgrade=Ikona Zotero se nyní nachází v Panelu nástrojů Firefoxu. Zotero otevřete kliknutím na ikonu, nebo stisknutím %S.

View file

@ -169,7 +169,7 @@
<!ENTITY zotero.preferences.locate.locateEngineManager "Håndtering af søgemaskiner for artikler">
<!ENTITY zotero.preferences.locate.description "Beskrivelse">
<!ENTITY zotero.preferences.locate.name "Navn">
<!ENTITY zotero.preferences.locate.locateEnginedescription "En søgemaskine udvider mulighederne drop-down-menuen for Lokalisering i Info-vinduet. Hvis man aktiverer søgemaskinerne i nedenstående liste, bliver de føjet til drop-down-menuen og kan anvendes til at lokalisere Elementer fra dit Bibliotek på WWW.">
<!ENTITY zotero.preferences.locate.locateEnginedescription "En søgemaskine udvider mulighederne i drop-down-menuen for Find i Info-fanebladet. Hvis man aktiverer søgemaskinerne i nedenstående liste, bliver de føjet til drop-down-menuen og kan anvendes til at lokalisere elementer fra dit bibliotek på WWW.">
<!ENTITY zotero.preferences.locate.addDescription "To add a Lookup Engine that is not on the list, visit the desired search engine in your browser and select 'Add' from the Firefox Search Bar. When you reopen this preference pane you will have the option to enable the new Lookup Engine.">
<!ENTITY zotero.preferences.locate.restoreDefaults "Gendan Defaults">

View file

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Navn:">
<!ENTITY zotero.search.searchInLibrary "Search in library:">
<!ENTITY zotero.search.searchInLibrary "Søg i bibliotek:">
<!ENTITY zotero.search.joinMode.prefix "Match">
<!ENTITY zotero.search.joinMode.any "enhver">

View file

@ -8,7 +8,7 @@
<!ENTITY zotero.general.cancel "Annullér">
<!ENTITY zotero.errorReport.title "Zotero fejlrapport">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero.">
<!ENTITY zotero.errorReport.unrelatedMessages "Dette kan inkludere beskeder, som ikke har noget med Zotero at gøre.">
<!ENTITY zotero.errorReport.submissionInProgress "Vent venligst mens fejlrapporten registreres.">
<!ENTITY zotero.errorReport.submitted "Din fejlrapport er registreret.">
<!ENTITY zotero.errorReport.reportID "Rapport-ID:">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Vis ukategoriserede elementer">
<!ENTITY zotero.items.itemType "Type">
<!ENTITY zotero.items.type_column "Item Type">
<!ENTITY zotero.items.type_column "Elementtype">
<!ENTITY zotero.items.title_column "Titel">
<!ENTITY zotero.items.creator_column "Ophav">
<!ENTITY zotero.items.date_column "Dato">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Gem til Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Vedhæftede filer kan ikke gemmes til det valgte bibliotek. Dette element vil blive gemt i dit bibliotek i stedet.">
<!ENTITY zotero.downloadManager.noPDFTools.description "For at bruge denne funktion skal du først installere PDF-værktøjerne i Zoteros indstillinger.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -81,9 +81,9 @@ upgrade.couldNotMigrate.restart=Hvis du fortsat får denne meddelelse, så genst
errorReport.reportError=Send rapport om fejl...
errorReport.reportErrors=Send rapport om fejl....
errorReport.reportInstructions=Du kan sende denne fejlmelding ved at vælge "%S" fra Handlinger-menuen (tandhjulikonet).
errorReport.followingReportWillBeSubmitted=The following report will be submitted:
errorReport.noErrorsLogged=No errors have been logged since %S started.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers.
errorReport.followingReportWillBeSubmitted=Følgende rapport vil blive sendt:
errorReport.noErrorsLogged=Der er ikke registreret nogen fejl, siden %S startede.
errorReport.advanceMessage=Tryk %S for at sende rapporten til Zotero-udviklerne.
errorReport.stepsToReproduce=Følgende skridt kan genskabe situationen:
errorReport.expectedResult=Forventet resultat:
errorReport.actualResult=Faktisk resultat:
@ -193,10 +193,10 @@ tagColorChooser.numberKeyInstructions=Du kan tilføje dette mærke til valgte el
tagColorChooser.maxTags=Op til %S mærker i hvert bibliotek kan have farver tilknyttet.
pane.items.loading=Henter listen med elementer...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Vedhæft henvisning til URI
pane.items.attach.link.uri=Indtast en URI:
pane.items.columnChooser.moreColumns=Flere kolonner
pane.items.columnChooser.secondarySort=Sekundær sortering (%S)
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Flyt til papirkurv
pane.items.trash=Er du sikker på, du vil lægge dette element i papirkurven?
pane.items.trash.multiple=Er du sikker på, du vil lægge disse elementer i papirkurven?
@ -483,7 +483,7 @@ ingester.scrapingTo=Gemmer i
ingester.scrapeComplete=Elementet er gemt
ingester.scrapeError=Elementet kunne ikke gemmes
ingester.scrapeErrorDescription=En fejl opstod under forsøget på at gemme elementet. Tjek %S for mere information.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues
ingester.scrapeErrorDescription.linkText=Fejlsøg oversætterproblemer
ingester.scrapeErrorDescription.previousError=Processen kunne ikke udføres pga. en tidligere Zotero-fejl.
ingester.importReferRISDialog.title=Import til Zotero med RIS/Refer
@ -948,7 +948,7 @@ locate.showFile.label=Vis fil
locate.showFile.tooltip=Åbn mappen, som filen findes i
locate.libraryLookup.label=Opslag i bibliotekskatalogen
locate.libraryLookup.tooltip=Slå dette element op med den valgte OpenURL fortolker
locate.manageLocateEngines=Håndtér opslagsmaskiner...
locate.manageLocateEngines=Håndtér søgemaskiner...
standalone.corruptInstallation=Din Zotero Standalone installation lader til at være ødelagt pga. en fejlslagen automatisk opdatering. Selvom Zotero måske fortsat vil du, tilrådes det at hente den seneste version på http://zotero.org/support/standalone for at undgå mulige fejl.
standalone.addonInstallationFailed.title=Installation af udvidelsesmodul slog fejl

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "In Zotero speichern">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Anhänge können in der aktuell gewählten Bibliothek nicht gespeichert werden. Der Eintrag wird stattdessen in Ihrer Bibliothek gespeichert.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Um diese Funktion zu nutzen, müssen Sie zuerst die PDF-Werkzeuge in den Zotero-Einstellungen installieren.">
<!ENTITY zotero.attachLink.title "Link zu einer URI anhängen">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Titel:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Sie können bis zu %S Tags in jeder Bibliothek Farben zu
pane.items.loading=Lade die Liste der Einträge...
pane.items.columnChooser.moreColumns=Weitere Spalten
pane.items.columnChooser.secondarySort=Sekundäre Sortierung (%S)
pane.items.attach.link.uri.title=Link zu einer URI anhängen
pane.items.attach.link.uri=URI eingeben:
pane.items.attach.link.uri.unrecognized=Zotero hat die eingegeben URI nicht erkannt. Bitte überprüfen Sie die Adresse und versuchen Sie es erneut.
pane.items.attach.link.uri.file=Um einen Link zu einer Datei hinzuzufügen, verwenden Sie bitte "%S".
pane.items.trash.title=In den Papierkorb verschieben
pane.items.trash=Sind Sie sicher, dass Sie den ausgewählten Eintrag in den Papierkorb verschieben wollen?
pane.items.trash.multiple=Sind Sie sicher, dass Sie die ausgewählten Einträge in den Papierkorb verschieben wollen?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Loading items list...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
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?

View file

@ -284,4 +284,10 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -198,8 +198,8 @@ tagColorChooser.maxTags = Up to %S tags in each library c
pane.items.loading = Loading items list…
pane.items.columnChooser.moreColumns = More Columns
pane.items.columnChooser.secondarySort = Secondary Sort (%S)
pane.items.attach.link.uri.title = Attach Link to URI
pane.items.attach.link.uri = Enter a URI:
pane.items.attach.link.uri.unrecognized = Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file = To attach a link to a file, please use “%S”.
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?

View file

@ -18,12 +18,12 @@
<!ENTITY zotero.preferences.fontSize.small "Pequeña">
<!ENTITY zotero.preferences.fontSize.medium "Mediana">
<!ENTITY zotero.preferences.fontSize.large "Grande">
<!ENTITY zotero.preferences.fontSize.xlarge "Súper grande">
<!ENTITY zotero.preferences.fontSize.xlarge "Super grande">
<!ENTITY zotero.preferences.fontSize.notes "Tamaño de letra en las notas:">
<!ENTITY zotero.preferences.miscellaneous "Miscelánea">
<!ENTITY zotero.preferences.autoUpdate "Automáticamente comprobar si hay traductores y estilos actualizados ">
<!ENTITY zotero.preferences.updateNow "Hacerlo ahora">
<!ENTITY zotero.preferences.updateNow "Actualizarlo">
<!ENTITY zotero.preferences.reportTranslationFailure "Informar de fallos en los traductores de página">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader "Permitir que zotero.org personalice contenido basándose en la versión actual de Zotero">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader.tooltip "Si se activa, la versión actual de Zotero se añadirá a las peticiones HTTP a zotero.org">
@ -61,11 +61,11 @@
<!ENTITY zotero.preferences.sync.fileSyncing "Sincronización de archivos">
<!ENTITY zotero.preferences.sync.fileSyncing.url "URL:">
<!ENTITY zotero.preferences.sync.fileSyncing.myLibrary "Sincronizar los archivos adjuntos en Mi biblioteca usando">
<!ENTITY zotero.preferences.sync.fileSyncing.groups "Sincronizar los archivos en bibliotecas de grupo usando el almacén Zotero">
<!ENTITY zotero.preferences.sync.fileSyncing.groups "Sincronizar los archivos en bibliotecas de grupo usando el almacenaje de Zotero">
<!ENTITY zotero.preferences.sync.fileSyncing.download "Descargar archivos">
<!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "en el momento de sincronizar">
<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "según se necesite">
<!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Al usar el almacén de Zotero, acepta sus">
<!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Mediante el uso de almacenamiento provisto por Zotero, acepta quedar obligado por su">
<!ENTITY zotero.preferences.sync.fileSyncing.tos2 "términos y condiciones">
<!ENTITY zotero.preferences.sync.reset.warning1 "Las siguientes operaciones son para utilizar sólo en situaciones raras, específicas, y no deberían usarse para una gestión de problemas generales. En muchos casos, reestablecer causará problemas adicionales. Vea">
<!ENTITY zotero.preferences.sync.reset.warning2 "Opciones para reestablecer la sincronización">
@ -82,22 +82,22 @@
<!ENTITY zotero.preferences.sync.reset.button "Restablecer…">
<!ENTITY zotero.preferences.prefpane.search "Búsqueda">
<!ENTITY zotero.preferences.prefpane.search "Buscar">
<!ENTITY zotero.preferences.search.fulltextCache "Copia local para búsquedas a texto completo">
<!ENTITY zotero.preferences.search.pdfIndexing "Indización de PDF">
<!ENTITY zotero.preferences.search.indexStats "Estadísticas de indización">
<!ENTITY zotero.preferences.search.pdfIndexing "Indexación de PDF">
<!ENTITY zotero.preferences.search.indexStats "Estadísticas de indexación">
<!ENTITY zotero.preferences.search.indexStats.indexed "Indizados:">
<!ENTITY zotero.preferences.search.indexStats.indexed "Indexado:">
<!ENTITY zotero.preferences.search.indexStats.partial "Parciales:">
<!ENTITY zotero.preferences.search.indexStats.unindexed "No indizados:">
<!ENTITY zotero.preferences.search.indexStats.unindexed "No indexados:">
<!ENTITY zotero.preferences.search.indexStats.words "Palabras:">
<!ENTITY zotero.preferences.fulltext.textMaxLength "Máximo de caracteres indizados por archivo:">
<!ENTITY zotero.preferences.fulltext.pdfMaxPages "Máximo de páginas indizadas por archivo:">
<!ENTITY zotero.preferences.fulltext.textMaxLength "Máximo de caracteres indexados por archivo:">
<!ENTITY zotero.preferences.fulltext.pdfMaxPages "Máximo de páginas indexadas por archivo:">
<!ENTITY zotero.preferences.prefpane.export "Exportar">
<!ENTITY zotero.preferences.citationOptions.caption "Opciones de cita">
<!ENTITY zotero.preferences.citationOptions.caption "Opciones de citas">
<!ENTITY zotero.preferences.export.citePaperJournalArticleURL "Incluir los URL de los artículos en las referencias">
<!ENTITY zotero.preferences.export.citePaperJournalArticleURL.description "Sin esta opción, Zotero solo incluye los URL al citar artículos de revistas y periódicos si el artículo no tiene un intervalo de páginas especificado.">
@ -132,18 +132,18 @@
<!ENTITY zotero.preferences.keys.toggleFullscreen "Conmutar el modo de pantalla completa">
<!ENTITY zotero.preferences.keys.focusLibrariesPane "Enfocar el panel de bibliotecas">
<!ENTITY zotero.preferences.keys.quicksearch "Búsqueda rápida">
<!ENTITY zotero.preferences.keys.newItem "Crear un New Item">
<!ENTITY zotero.preferences.keys.newItem "Crear un nuevo elemento">
<!ENTITY zotero.preferences.keys.newNote "Crear una Nueva nota">
<!ENTITY zotero.preferences.keys.toggleTagSelector "Conmutar el selector de marcas">
<!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Copiar las citas para los ítems seleccionados al portapapeles">
<!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Copiar los ítems seleccionados al portapapeles">
<!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Copiar las citas para los elementos seleccionados al portapapeles">
<!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Copiar los elementos seleccionados al portapapeles">
<!ENTITY zotero.preferences.keys.importFromClipboard "Importar desde el portapapeles">
<!ENTITY zotero.preferences.keys.changesTakeEffect "Los cambios tendrán efecto sólo en las ventanas nuevas">
<!ENTITY zotero.preferences.prefpane.proxies "Servidores Proxies">
<!ENTITY zotero.preferences.prefpane.proxies "Servidores proxies">
<!ENTITY zotero.preferences.proxies.proxyOptions "Opciones de servidor proxy">
<!ENTITY zotero.preferences.proxies.desc_before_link "Zotero transparentemente redirigirá las peticiones a través de los servidores proxies guardados. Consulte la">
<!ENTITY zotero.preferences.proxies.desc_before_link "Zotero redirigirá transparentemente las peticiones a través de los servidores proxies guardados. Consulte la">
<!ENTITY zotero.preferences.proxies.desc_link "Documentación del servidor proxy">
<!ENTITY zotero.preferences.proxies.desc_after_link "para mayor información.">
<!ENTITY zotero.preferences.proxies.transparent "Habilitar el redireccionamiento del servidor proxy">
@ -155,7 +155,7 @@
<!ENTITY zotero.preferences.proxies.multiSite "Multi-sitio">
<!ENTITY zotero.preferences.proxies.autoAssociate "Automáticamente asociar nuevos hosts">
<!ENTITY zotero.preferences.proxies.variables "Puede usar las siguientes variables en su esquema del servidor proxy:">
<!ENTITY zotero.preferences.proxies.variables "Puede usar las siguientes variables en su esquema de servidor proxy:">
<!ENTITY zotero.preferences.proxies.h_variable "&#37;h - El nombre del sistema del sitio proxificado (ejemplo: www.zotero.org)">
<!ENTITY zotero.preferences.proxies.p_variable "&#37;p - La ruta de la página proxificado excluyendo la barra invertida (ejemplo: acerca/index.html)">
<!ENTITY zotero.preferences.proxies.d_variable "&#37;d - La ruta del directorio (ejemplo: acerca/)">
@ -170,20 +170,20 @@
<!ENTITY zotero.preferences.locate.description "Descripción">
<!ENTITY zotero.preferences.locate.name "Nombre">
<!ENTITY zotero.preferences.locate.locateEnginedescription "Un motor de búsqueda amplía la capacidad de la lista desplegable Localizar en el panel de información. Habilitando dichos motores de búsqueda a la lista de abajo, éstas se agregarán a la lista desplegable y se pueden utilizar para localizar los recursos de su biblioteca en la red.">
<!ENTITY zotero.preferences.locate.addDescription "Para añadir un motor de búsqueda que no está en la lista, visita en tu navegador el motor de búsqueda y selecciona &#34;Añadir&#34; desde el menú Localizar de Zotero.">
<!ENTITY zotero.preferences.locate.addDescription "Para añadir un motor de búsqueda que no está en la lista, visite en su navegador el motor de búsqueda y selecciona &#34;Añadir&#34; desde el menú Localizar de Zotero.">
<!ENTITY zotero.preferences.locate.restoreDefaults "Restaurar configuración por omisión">
<!ENTITY zotero.preferences.charset "Codificación de caracteres">
<!ENTITY zotero.preferences.charset.importCharset "Importar codificación de caracteres">
<!ENTITY zotero.preferences.charset.displayExportOption "Mostrar opción de codificación de caracteres en la exportación">
<!ENTITY zotero.preferences.dataDir "Lugar de almacenamiento">
<!ENTITY zotero.preferences.dataDir "Lugar del directorio de almacenamiento">
<!ENTITY zotero.preferences.dataDir.useProfile "Usar el directorio del perfil de usuario">
<!ENTITY zotero.preferences.dataDir.custom "Especial:">
<!ENTITY zotero.preferences.dataDir.custom "Personalizar:">
<!ENTITY zotero.preferences.dataDir.choose "Elegir...">
<!ENTITY zotero.preferences.dataDir.reveal "Mostrar el directorio de datos">
<!ENTITY zotero.preferences.attachmentBaseDir.caption "Directorio base de adjunto enlazado">
<!ENTITY zotero.preferences.attachmentBaseDir.caption "Directorio base de adjuntos enlazados">
<!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero usará caminos relativos para los archivos adjuntos enlazados dentro del directorio base, permitiéndole acceder a los archivos desde diferentes ordenadores, siempre que la estructura de archivos dentro del directorio base se mantenga igual.">
<!ENTITY zotero.preferences.attachmentBaseDir.basePath "Directorio base:">
<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Elegir...">

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Guardar en Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Los archivos adjuntos no se pueden guardar en la biblioteca seleccionada. Así, este ítem será guardado en su biblioteca.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Para utilizar esta función, debe primeramente instalar las herramientas PDF en las preferencias de Zotero.">
<!ENTITY zotero.attachLink.title "Adjuntar enlace a URI">
<!ENTITY zotero.attachLink.label.link "Enlace:">
<!ENTITY zotero.attachLink.label.title "Título:">

View file

@ -27,7 +27,7 @@ general.updateAvailable=Actualización disponible
general.noUpdatesFound=No hay actualizaciones.
general.isUpToDate=%S está actualizado.
general.upgrade=Actualizar
general.yes=Sí
general.yes=Si
general.no=No
general.notNow=no ahora
general.passed=Superado
@ -135,7 +135,7 @@ startupError.zoteroVersionIsOlder.upgrade=Actualízalo a la última versión en
startupError.zoteroVersionIsOlder.current=Versión actual: %S
startupError.databaseUpgradeError=Error de actualización de la base de datos
date.relative.secondsAgo.one=Hace un segundo
date.relative.secondsAgo.one=Hace 1 segundo
date.relative.secondsAgo.multiple=Hace %S segundos
date.relative.minutesAgo.one=Hace un minuto
date.relative.minutesAgo.multiple=Hace %S minutos
@ -195,8 +195,8 @@ tagColorChooser.maxTags=Se puede asignar colores a hasta %S etiquetas de cada bi
pane.items.loading=Cargando la lista de ítems...
pane.items.columnChooser.moreColumns=Más columnas
pane.items.columnChooser.secondarySort=Orden secundario (%S)
pane.items.attach.link.uri.title=Adjuntar enlace a URI
pane.items.attach.link.uri=Introducir una URI:
pane.items.attach.link.uri.unrecognized=Zotero no reconoce la dirección URL que ingresó. Por favor verifiquela e intente nuevamente.
pane.items.attach.link.uri.file=Para adjuntar un enlace a un archivo, por favor utilice “%S”.
pane.items.trash.title=Enviar a la papelera
pane.items.trash=¿Seguro que quieres enviar el ítem a la papelera?
pane.items.trash.multiple=¿Seguro que quieres enviar los ítems a la papelera?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Zoterosse salvestamine">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Valitud raamatukokku ei ole võimalik manuseid salvestada. See kirje salvestatakse teie isiklikku raamatukokku.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Selle funktsiooni kasutamiseks on kõigepealt tarvis paigaldada PDF tööriistad Zotero seadetes.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Kirjete nimekirja laadimine...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Liiguta Prahi hulka
pane.items.trash=Olete kindel, et soovite valitud kirje Prahi hulka liigutada?
pane.items.trash.multiple=Olete kindel, et soovite valitud kirjed Prahi hulka liigutada?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=datuak kargatzen ari...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Zaborrara bota
pane.items.trash=Hautatutako itema zaborrera bota?
pane.items.trash.multiple=Hautatutako itemak zaborrera bota?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "ذخیره در زوترو">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=بار کردن لیست آیتم‌ها...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=انتقال به سطل بازیافت
pane.items.trash=آیتم‌ انتخاب شده به سطل بازیافت برود؟
pane.items.trash.multiple=آیتم‌‌های انتخاب شده به سطل بازیافت بروند؟

View file

@ -3,7 +3,7 @@
<!ENTITY zotero.preferences.default "Oletus:">
<!ENTITY zotero.preferences.items "nimikkeet">
<!ENTITY zotero.preferences.period ".">
<!ENTITY zotero.preferences.settings "Settings">
<!ENTITY zotero.preferences.settings "Asetukset">
<!ENTITY zotero.preferences.prefpane.general "Yleistä">
@ -22,12 +22,12 @@
<!ENTITY zotero.preferences.fontSize.notes "Muistiinpanojen kirjasinkoko:">
<!ENTITY zotero.preferences.miscellaneous "Sekalaista">
<!ENTITY zotero.preferences.autoUpdate "Automatically check for updated translators and styles">
<!ENTITY zotero.preferences.autoUpdate "Tarkista sivutulkkien ja tyylien päivitykset automaattisesti">
<!ENTITY zotero.preferences.updateNow "Päivitä nyt">
<!ENTITY zotero.preferences.reportTranslationFailure "Ilmoita toimimattomista sivutulkeista">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader "Anna zotero.orgin muunnella sisältöään nykyisen Zotero-version perusteella">
<!ENTITY zotero.preferences.zoteroDotOrgVersionHeader.tooltip "If enabled, the current Zotero version will be added to HTTP requests to zotero.org.">
<!ENTITY zotero.preferences.parseRISRefer "Use Zotero for downloaded BibTeX/RIS/Refer files">
<!ENTITY zotero.preferences.parseRISRefer "Käytä Zoteroa ladattujen BibTeX/Refer-tiedostojen avaamiseen">
<!ENTITY zotero.preferences.automaticSnapshots "Ota tilannekuvat automaattisesti luotaessa nimikettä web-sivusta">
<!ENTITY zotero.preferences.downloadAssociatedFiles "Liitä automaattisesti asiaankuuluvat PDF:t ja muut tiedostot">
<!ENTITY zotero.preferences.automaticTags "Merkitse automaattisesti nimikkeisiin avainsanat ja otsikot">
@ -55,8 +55,8 @@
<!ENTITY zotero.preferences.sync.createAccount "Luo käyttäjätili">
<!ENTITY zotero.preferences.sync.lostPassword "Unohditko salasanan?">
<!ENTITY zotero.preferences.sync.syncAutomatically "Synkronoi automaattisesti">
<!ENTITY zotero.preferences.sync.syncFullTextContent "Sync full-text content">
<!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero can sync the full-text content of files in your Zotero libraries with zotero.org and other linked devices, allowing you to easily search for your files wherever you are. The full-text content of your files will not be shared publicly.">
<!ENTITY zotero.preferences.sync.syncFullTextContent "Synkronisoi kokotekstit">
<!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero voi synkronisoida kirjastossasi olevien tiedostojen kokotekstisisällön zotero.orgiin ja linkattuihin laitteisiin, joten voi helposti hakea tietoja missä vain. Tiedostojen kokotekstisisältöä ei jaeta julkisesti.">
<!ENTITY zotero.preferences.sync.about "Tietoa synkronoinnista">
<!ENTITY zotero.preferences.sync.fileSyncing "Tiedostojen synkronointi">
<!ENTITY zotero.preferences.sync.fileSyncing.url "Osoite:">
@ -64,12 +64,12 @@
<!ENTITY zotero.preferences.sync.fileSyncing.groups "Synkronoi ryhmäkirjastojen liitetiedostot käyttäen Zoteron tallennustilaa">
<!ENTITY zotero.preferences.sync.fileSyncing.download "Lataa tiedostot">
<!ENTITY zotero.preferences.sync.fileSyncing.download.atSyncTime "synkronoinnin yhteydessä">
<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "as needed">
<!ENTITY zotero.preferences.sync.fileSyncing.download.onDemand "tarvittaessa">
<!ENTITY zotero.preferences.sync.fileSyncing.tos1 "Käyttämällä Zoteron tallennustilaa sitoudut samalla siihen liittyviin">
<!ENTITY zotero.preferences.sync.fileSyncing.tos2 "käyttöehtoihin">
<!ENTITY zotero.preferences.sync.reset.warning1 "Seuraavat toiminnot ovat tarpeen vain äärimmäisen harvinaisissa tilanteissa, eikä niitä tulisi käyttää tavalliseen virheenetsintään. Monissa tapauksissa asetusten nollaus voi aiheuttaa lisää ongelmia. Katso ">
<!ENTITY zotero.preferences.sync.reset.warning2 "Synkroinnin nollauksen asetukset">
<!ENTITY zotero.preferences.sync.reset.warning3 " for more information.">
<!ENTITY zotero.preferences.sync.reset.warning3 "saadaksesi lisätietoja.">
<!ENTITY zotero.preferences.sync.reset.fullSync "Täydellinen synkronointi Zotero-palvelimen kanssa">
<!ENTITY zotero.preferences.sync.reset.fullSync.desc "Yhdistä paikallinen Zotero-aineisto synkronointipalvelimen aineiston kanssa jättäen synkronointihistoria huomioimatta">
<!ENTITY zotero.preferences.sync.reset.restoreFromServer "Palauta aineisto Zotero-palvelimelta">
@ -78,7 +78,7 @@
<!ENTITY zotero.preferences.sync.reset.restoreToServer.desc "Poista kaikki palvelimella oleva aineisto ja korvaa se paikallisella Zotero-aineistolla">
<!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory "Poista tiedostojen synkronointihistoria">
<!ENTITY zotero.preferences.sync.reset.resetFileSyncHistory.desc "Tarkistaa jokaisen paikallisen liitetiedoston löytymisen tallennuspalvelimelta">
<!ENTITY zotero.preferences.sync.reset "Reset">
<!ENTITY zotero.preferences.sync.reset "Nollaa">
<!ENTITY zotero.preferences.sync.reset.button "Palauta">
@ -128,12 +128,12 @@
<!ENTITY zotero.preferences.prefpane.keys "Shortcut Keys">
<!ENTITY zotero.preferences.keys.openZotero "Avaa/sulje Zotero-ikkuna">
<!ENTITY zotero.preferences.keys.saveToZotero "Save to Zotero (address bar icon)">
<!ENTITY zotero.preferences.keys.saveToZotero "Tallenna Zoteroon (osoitepalkin kuvake)">
<!ENTITY zotero.preferences.keys.toggleFullscreen "Koko ruudun tila">
<!ENTITY zotero.preferences.keys.focusLibrariesPane "Focus Libraries Pane">
<!ENTITY zotero.preferences.keys.focusLibrariesPane "Kohdista kirjastonäkymään">
<!ENTITY zotero.preferences.keys.quicksearch "Pikahaku">
<!ENTITY zotero.preferences.keys.newItem "Create a New Item">
<!ENTITY zotero.preferences.keys.newNote "Create a New Note">
<!ENTITY zotero.preferences.keys.newItem "Luo uusi nimike">
<!ENTITY zotero.preferences.keys.newNote "Luo uusi muistiinpanot">
<!ENTITY zotero.preferences.keys.toggleTagSelector "Aiheenvalitsin päälle/pois">
<!ENTITY zotero.preferences.keys.copySelectedItemCitationsToClipboard "Kopioi valittujen nimikkeiden sitaatit leikepöydälle">
<!ENTITY zotero.preferences.keys.copySelectedItemsToClipboard "Kopioi valitut nimikkeet leikepöydälle">
@ -146,7 +146,7 @@
<!ENTITY zotero.preferences.proxies.desc_before_link "Zotero välittää huomaamattomasti pyyntöjä tallennettujen välityspalvelinten kautta. Katso">
<!ENTITY zotero.preferences.proxies.desc_link "välityspalvelinten ohjeesta">
<!ENTITY zotero.preferences.proxies.desc_after_link "lisätietoja.">
<!ENTITY zotero.preferences.proxies.transparent "Transparently redirect requests through previously used proxies">
<!ENTITY zotero.preferences.proxies.transparent "Käytä välityspalvelinta uudelleenohjaukseen">
<!ENTITY zotero.preferences.proxies.autoRecognize "Tunnista välitetyt resurssit automaattisesti">
<!ENTITY zotero.preferences.proxies.disableByDomain "Poista käytöstä välitetty uudelleenohjaus, kun palvelinnimessä on">
<!ENTITY zotero.preferences.proxies.configured "Konfiguroidut välityspalvelimet">
@ -163,14 +163,14 @@
<!ENTITY zotero.preferences.proxies.a_variable "&#37;a - Mikä tahansa merkkijono">
<!ENTITY zotero.preferences.prefpane.advanced "Lisäasetukset">
<!ENTITY zotero.preferences.advanced.filesAndFolders "Files and Folders">
<!ENTITY zotero.preferences.advanced.filesAndFolders "Tiedostot ja kansiot">
<!ENTITY zotero.preferences.prefpane.locate "Paikanna">
<!ENTITY zotero.preferences.locate.locateEngineManager "Artikkelihakumoottorin hallinta">
<!ENTITY zotero.preferences.locate.description "Kuvaus">
<!ENTITY zotero.preferences.locate.name "Nimi">
<!ENTITY zotero.preferences.locate.locateEnginedescription "Artikkelihakumoottori laajentaa Info-sivulla olevan Paikanna-valikon toimintaa. Laittamalla päälle alla luetellut artikkelihakumoottori ne lisätään pudotusvalikkoon ja niitä voi käyttää kirjastossasi olevien resurssien etsimiseen webistä.">
<!ENTITY zotero.preferences.locate.addDescription "To add a Lookup Engine that is not on the list, visit the desired search engine in your browser and select 'Add' from the Firefox Search Bar. When you reopen this preference pane you will have the option to enable the new Lookup Engine.">
<!ENTITY zotero.preferences.locate.locateEnginedescription "Artikkelihakumoottori laajentaa Info-sivulla olevan Paikanna-valikon toimintaa. Laittamalla päälle alla luetellut artikkelihakumoottorit ne lisätään pudotusvalikkoon ja niitä voi käyttää kirjastossasi olevien resurssien etsimiseen webistä.">
<!ENTITY zotero.preferences.locate.addDescription "Lisätäksesi artikkelihakumoottorin, jota ei ole luettelossa, vieraile kyseisellä nettisivulla ja valitse 'Add' (Lisää) Firefoxin hakupalkista. Kun avaat uudelleen asetukset, voit aktivoida uuden artikkelihakumoottorin.">
<!ENTITY zotero.preferences.locate.restoreDefaults "Palauta oletusarvot">
<!ENTITY zotero.preferences.charset "Merkistökoodaus">
@ -183,11 +183,11 @@
<!ENTITY zotero.preferences.dataDir.choose "Valitse...">
<!ENTITY zotero.preferences.dataDir.reveal "Näytä datahakemisto">
<!ENTITY zotero.preferences.attachmentBaseDir.caption "Linked Attachment Base Directory">
<!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero will use relative paths for linked file attachments within the base directory, allowing you to access files on different computers as long as the file structure within the base directory remains the same.">
<!ENTITY zotero.preferences.attachmentBaseDir.basePath "Base directory:">
<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Choose…">
<!ENTITY zotero.preferences.attachmentBaseDir.resetBasePath "Revert to Absolute Paths…">
<!ENTITY zotero.preferences.attachmentBaseDir.caption "Linkattujen liitteiden juurikansio">
<!ENTITY zotero.preferences.attachmentBaseDir.message "Zotero käyttää suhteellisia polkuja viitatakseen tiedostoliitteisiin juurikansiossa, joten voit käyttää tiedostoja eri tietokoneilla, kunhan tiedostorakenne juurikansion sisällä pysyy samana.">
<!ENTITY zotero.preferences.attachmentBaseDir.basePath "Juurikansio:">
<!ENTITY zotero.preferences.attachmentBaseDir.selectBasePath "Valitse...">
<!ENTITY zotero.preferences.attachmentBaseDir.resetBasePath "Palauta absoluuttiset polut...">
<!ENTITY zotero.preferences.dbMaintenance "Tietokannan huolto">
<!ENTITY zotero.preferences.dbMaintenance.integrityCheck "Tarkista tietokannan eheys">
@ -206,4 +206,4 @@
<!ENTITY zotero.preferences.openAboutConfig "Avaa about:config">
<!ENTITY zotero.preferences.openCSLEdit "Avaa CSL-muokkain">
<!ENTITY zotero.preferences.openCSLPreview "Avaa CSL-esikatselu">
<!ENTITY zotero.preferences.openAboutMemory "Open about:memory">
<!ENTITY zotero.preferences.openAboutMemory "Avaa about:memory">

View file

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Nimi:">
<!ENTITY zotero.search.searchInLibrary "Search in library:">
<!ENTITY zotero.search.searchInLibrary "Etsi kirjastosta:">
<!ENTITY zotero.search.joinMode.prefix "Vertaa">
<!ENTITY zotero.search.joinMode.any "joku">
@ -14,7 +14,7 @@
<!ENTITY zotero.search.textModes.phrase "Lause">
<!ENTITY zotero.search.textModes.phraseBinary "Lause (sis. binääritiedostot)">
<!ENTITY zotero.search.textModes.regexp "Säännöllinen lauseke">
<!ENTITY zotero.search.textModes.regexpCS "Säännöllinen lauseke (kirjaintaso)">
<!ENTITY zotero.search.textModes.regexpCS "Säännöllinen lauseke (merkkikokoriippuvainen)">
<!ENTITY zotero.search.date.units.days "päivää">
<!ENTITY zotero.search.date.units.months "kuukautta">

View file

@ -3,9 +3,9 @@ general.filter=Suodata:
general.highlight=Korosta:
general.clearAll=Tyhjennä kaikki
general.jumpToYear=Hyppää vuoteen:
general.firstBand=Nauha yksi:
general.secondBand=Nauha kaksi:
general.thirdBand=Nauha kolme:
general.firstBand=Ensimmäinen kaista:
general.secondBand=Toinen kaista:
general.thirdBand=Kolmas kaista:
general.dateType=Päiväysmuoto:
general.timelineHeight=Aikajanan korkeus
general.fitToScreen=Sovita näytölle

View file

@ -8,12 +8,12 @@
<!ENTITY zotero.general.cancel "Peruuta">
<!ENTITY zotero.errorReport.title "Zoteron virheraportti">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero.">
<!ENTITY zotero.errorReport.submissionInProgress "Odota">
<!ENTITY zotero.errorReport.unrelatedMessages "Mukana saattaa olla Zoteroon liittymättömiä viestejä.">
<!ENTITY zotero.errorReport.submissionInProgress "Odota, kunnes virheraportti on toimitettu.">
<!ENTITY zotero.errorReport.submitted "Virheraporttisi on toimitettu.">
<!ENTITY zotero.errorReport.reportID "Raportin tunnus:">
<!ENTITY zotero.errorReport.postToForums "Lähetä Zoteron keskustelualueelle (forums.zotero.org) viesti, joka sisältää raportin tunnuksen, ongelman kuvauksen sekä toimenpiteet, joilla virhe saadaan toistettua.">
<!ENTITY zotero.errorReport.notReviewed "Error reports are generally not reviewed unless referred to in the forums.">
<!ENTITY zotero.errorReport.notReviewed "Virheraportteja ei yleensä käsitellä, jos niihin ei ole viitattu keskustelualueella.">
<!ENTITY zotero.upgrade.title "Zoteron päivitysvelho">
<!ENTITY zotero.upgrade.newVersionInstalled "Olet asentanut Zoteron uuden version.">
@ -26,7 +26,7 @@
<!ENTITY zotero.upgrade.upgradeInProgress "Odota päivitysprosessin päättymistä. Tämä saattaa kestää muutamia minuutteja.">
<!ENTITY zotero.upgrade.upgradeSucceeded "Zotero-tietokantasi on onnistuneesti päivitetty.">
<!ENTITY zotero.upgrade.changeLogBeforeLink "Katso">
<!ENTITY zotero.upgrade.changeLogLink "muutoslogi">
<!ENTITY zotero.upgrade.changeLogLink "muutosloki">
<!ENTITY zotero.upgrade.changeLogAfterLink "tutustuaksesi uusiin ominaisuuksiin ja päivityksiin.">
<!ENTITY zotero.contextMenu.addTextToCurrentNote "Lisää valinta Zotero-muistiinpanoon">
@ -37,7 +37,7 @@
<!ENTITY zotero.tabs.info.label "Tiedot">
<!ENTITY zotero.tabs.notes.label "Muistiinpanot">
<!ENTITY zotero.tabs.attachments.label "Liitteet">
<!ENTITY zotero.tabs.tags.label "Merkit">
<!ENTITY zotero.tabs.tags.label "Avainsanat">
<!ENTITY zotero.tabs.related.label "Liittyvät">
<!ENTITY zotero.notes.separate "Muokkaa erillisessä ikkunassa">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Näytä arkistoimattomat nimikkeet">
<!ENTITY zotero.items.itemType "Nimikkeen tyyppi">
<!ENTITY zotero.items.type_column "Item Type">
<!ENTITY zotero.items.type_column "Nimikkeen tyyppi">
<!ENTITY zotero.items.title_column "Otsikko">
<!ENTITY zotero.items.creator_column "Luoja">
<!ENTITY zotero.items.date_column "Päiväys">
@ -66,7 +66,7 @@
<!ENTITY zotero.items.place_column "Paikka">
<!ENTITY zotero.items.volume_column "Vuosikerta">
<!ENTITY zotero.items.edition_column "Painos">
<!ENTITY zotero.items.pages_column "Sivuja">
<!ENTITY zotero.items.pages_column "Sivut">
<!ENTITY zotero.items.issue_column "Numero">
<!ENTITY zotero.items.series_column "Sarja">
<!ENTITY zotero.items.seriesTitle_column "Sarjan nimi">
@ -97,20 +97,20 @@
<!ENTITY zotero.toolbar.moreItemTypes.label "Lisää">
<!ENTITY zotero.toolbar.newItemFromPage.label "Uusi nimike nykyisestä sivusta">
<!ENTITY zotero.toolbar.lookup.label "Uusi nimike tunnisteen perusteella">
<!ENTITY zotero.toolbar.removeItem.label "Remove Item...">
<!ENTITY zotero.toolbar.newCollection.label "New Collection...">
<!ENTITY zotero.toolbar.newGroup "New Group...">
<!ENTITY zotero.toolbar.newSubcollection.label "New Subcollection...">
<!ENTITY zotero.toolbar.newSavedSearch.label "New Saved Search...">
<!ENTITY zotero.toolbar.removeItem.label "Poista nimike...">
<!ENTITY zotero.toolbar.newCollection.label "Uusi kokoelma...">
<!ENTITY zotero.toolbar.newGroup "Uusi ryhmä...">
<!ENTITY zotero.toolbar.newSubcollection.label "Uusi alakokoelma...">
<!ENTITY zotero.toolbar.newSavedSearch.label "Uusi tallennettu haku...">
<!ENTITY zotero.toolbar.emptyTrash.label "Tyhjennä roskakori">
<!ENTITY zotero.toolbar.tagSelector.label "Näytä/piilota merkkivalitsin">
<!ENTITY zotero.toolbar.actions.label "Toiminnot">
<!ENTITY zotero.toolbar.import.label "Import...">
<!ENTITY zotero.toolbar.import.label "Tuo...">
<!ENTITY zotero.toolbar.importFromClipboard "Tuo leikepöydältä">
<!ENTITY zotero.toolbar.export.label "Export Library...">
<!ENTITY zotero.toolbar.rtfScan.label "RTF Scan...">
<!ENTITY zotero.toolbar.export.label "Vie kirjasto...">
<!ENTITY zotero.toolbar.rtfScan.label "RTF-skannaus...">
<!ENTITY zotero.toolbar.timeline.label "Luo aikajana">
<!ENTITY zotero.toolbar.preferences.label "Preferences...">
<!ENTITY zotero.toolbar.preferences.label "Asetukset...">
<!ENTITY zotero.toolbar.supportAndDocumentation "Ohjeet ja tuki">
<!ENTITY zotero.toolbar.about.label "Tietoja Zoterosta">
<!ENTITY zotero.toolbar.advancedSearch "Tarkennettu haku">
@ -128,22 +128,22 @@
<!ENTITY zotero.toolbar.newNote "Uusi muistiinpano">
<!ENTITY zotero.toolbar.note.standalone "Uusi itsenäinen muistiinpano">
<!ENTITY zotero.toolbar.note.child "Uusi alamuistiinpano">
<!ENTITY zotero.toolbar.lookup "Lookup by Identifier...">
<!ENTITY zotero.toolbar.attachment.linked "Link to File...">
<!ENTITY zotero.toolbar.attachment.add "Store Copy of File...">
<!ENTITY zotero.toolbar.lookup "Etsi tunnisteen perusteella...">
<!ENTITY zotero.toolbar.attachment.linked "Linkitä tiedostoon...">
<!ENTITY zotero.toolbar.attachment.add "Tallenna tiedoston kopio...">
<!ENTITY zotero.toolbar.attachment.weblink "Tallenna linkki nykyiselle sivulle">
<!ENTITY zotero.toolbar.attachment.snapshot "Ota tilannekuva nykyisestä sivusta">
<!ENTITY zotero.tagSelector.noTagsToDisplay "Ei merkkejä">
<!ENTITY zotero.tagSelector.noTagsToDisplay "Ei näytettäviä avainsanoja">
<!ENTITY zotero.tagSelector.filter "Suodatin:">
<!ENTITY zotero.tagSelector.showAutomatic "Show automatic">
<!ENTITY zotero.tagSelector.displayAllInLibrary "Display all tags in this library">
<!ENTITY zotero.tagSelector.selectVisible "Select visible">
<!ENTITY zotero.tagSelector.clearVisible "Deselect visible">
<!ENTITY zotero.tagSelector.clearAll "Deselect all">
<!ENTITY zotero.tagSelector.displayAllInLibrary "Näytä tämän kirjaston kaikki avainsanat">
<!ENTITY zotero.tagSelector.selectVisible "Valitse näkyvät">
<!ENTITY zotero.tagSelector.clearVisible "Poista näkyvät valinnat">
<!ENTITY zotero.tagSelector.clearAll "Poista kaikki valinnat">
<!ENTITY zotero.tagSelector.assignColor "Aseta väri">
<!ENTITY zotero.tagSelector.renameTag "Rename Tag...">
<!ENTITY zotero.tagSelector.deleteTag "Delete Tag...">
<!ENTITY zotero.tagSelector.renameTag "Nimeä avainsana uudelleen...">
<!ENTITY zotero.tagSelector.deleteTag "Poista avainsana...">
<!ENTITY zotero.tagColorChooser.title "Valitse avainsanan väri ja sijainti">
<!ENTITY zotero.tagColorChooser.color "Väri:">
@ -176,7 +176,7 @@
<!ENTITY zotero.progress.title "Eteneminen">
<!ENTITY zotero.exportOptions.title "Export...">
<!ENTITY zotero.exportOptions.title "Vie...">
<!ENTITY zotero.exportOptions.format.label "Muoto:">
<!ENTITY zotero.exportOptions.translatorOptions.label "Kääntäjän asetukset">
@ -211,7 +211,7 @@
<!ENTITY zotero.integration.prefs.formatUsing.label "Muotoile käyttäen:">
<!ENTITY zotero.integration.prefs.bookmarks.label "Kirjanmerkit">
<!ENTITY zotero.integration.prefs.bookmarks.caption "Bookmarks are preserved across Microsoft Word and OpenOffice, but may be accidentally modified.">
<!ENTITY zotero.integration.prefs.bookmarks.caption "Kirjanmerkit säilytetään Microsoft Wordin ja OpenOfficen välillä, mutta ne voivat tahattomasti muuttua.">
<!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.label "Lyhennä lehtien nimet automaattisesti">
@ -251,7 +251,7 @@
<!ENTITY zotero.proxy.recognized.disable.label "Älä automaattisesti uudelleenohjaa pyyntöjä aiemmin tunnistettujen välitystyspalvelinten kautta">
<!ENTITY zotero.proxy.recognized.ignore.label "Ohita">
<!ENTITY zotero.recognizePDF.recognizing.label "Retrieving Metadata...">
<!ENTITY zotero.recognizePDF.recognizing.label "Haetaan metatietoja...">
<!ENTITY zotero.recognizePDF.cancel.label "Peruuta">
<!ENTITY zotero.recognizePDF.pdfName.label "PDF:n nimi">
<!ENTITY zotero.recognizePDF.itemName.label "Nimikkeen nimi">
@ -264,7 +264,7 @@
<!ENTITY zotero.rtfScan.ambiguousCitations.label "Monimerkityksiset sitaatit">
<!ENTITY zotero.rtfScan.mappedCitations.label "Paikannetut sitaatit">
<!ENTITY zotero.rtfScan.introPage.label "Johdanto">
<!ENTITY zotero.rtfScan.introPage.description "Zotero can automatically extract and reformat citations and insert a bibliography into RTF files. To get started, choose an RTF file below.">
<!ENTITY zotero.rtfScan.introPage.description "Zotero voi automaattisesti seuloa ja uudelleenmuotoilla viittaukset ja lisätä kirjallisuusluettelon RTF-tiedostoon. Valitse aluksi RTF-tiedosto.">
<!ENTITY zotero.rtfScan.introPage.description2 "Valitse aluksi luettava RTF-tiedosto sekä kirjoitettava tiedosto:">
<!ENTITY zotero.rtfScan.scanPage.label "Etsitään sitaatteja">
<!ENTITY zotero.rtfScan.scanPage.description "Zotero etsii asiakirjasta sitaatteja. Malta vielä hetki.">
@ -278,9 +278,15 @@
<!ENTITY zotero.rtfScan.inputFile.label "Luettava tiedosto">
<!ENTITY zotero.rtfScan.outputFile.label "Kirjoitettava tiedosto">
<!ENTITY zotero.file.choose.label "Choose File...">
<!ENTITY zotero.file.choose.label "Valitse tiedosto...">
<!ENTITY zotero.file.noneSelected.label "Tiedostoa ei ole valittu">
<!ENTITY zotero.downloadManager.label "Tallenna Zoteroon">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Liitteitä ei voi tallentaa valittuun kirjastoon. Nimike sen sijaan tallennetaan kirjastoon.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Käyttääksesi tätä ominaisuutta tulee sinun ensin asentaa PDF-työkalut Zoteron asetuksista.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -33,7 +33,7 @@ general.notNow=Ei nyt
general.passed=Onnistui
general.failed=Epäonnistui
general.and=ja
general.etAl=et al.
general.etAl=ym.
general.accessDenied=Pääsy evätty
general.permissionDenied=Ei riittäviä oikeuksia
general.character.singular=kirjain
@ -45,15 +45,15 @@ general.seeForMoreInformation=Katso %S, jos haluat tietää lisää.
general.enable=Laita päälle
general.disable=Ota pois päältä
general.remove=Poista
general.reset=Reset
general.reset=Nollaa
general.hide=Kätke
general.quit=Lopeta
general.useDefault=Käytä oletusarvoa
general.openDocumentation=Avaa käyttöohje
general.numMore=%S more…
general.numMore=%S lisää...
general.openPreferences=Avaa asetukset
general.keys.ctrlShift=Ctrl+Shift+
general.keys.cmdShift=Cmd+Shift+
general.keys.cmdShift=Cmd+Shift
general.operationInProgress=Zoteron toimenpide on käynnissä.
general.operationInProgress.waitUntilFinished=Odota, kunnes se valmis.
@ -62,7 +62,7 @@ general.operationInProgress.waitUntilFinishedAndTryAgain=Odota, kunnes se on val
punctuation.openingQMark="
punctuation.closingQMark="
punctuation.colon=:
punctuation.ellipsis=
punctuation.ellipsis=...
install.quickStartGuide=Quick Start Guide
install.quickStartGuide.message.welcome=Tervetuloa Zoteroon!
@ -81,28 +81,28 @@ upgrade.couldNotMigrate.restart=Jos saat toistuvasti tämän viestin, käynnist
errorReport.reportError=Report Error...
errorReport.reportErrors=Kerro virheestä...
errorReport.reportInstructions=Voit raportoida tämän virheen valitsemalla "%S" Toimintovalikosta (hammasratas).
errorReport.followingReportWillBeSubmitted=The following report will be submitted:
errorReport.noErrorsLogged=No errors have been logged since %S started.
errorReport.followingReportWillBeSubmitted=Seuraavanlainen raportti toimitetaan eteenpäin:
errorReport.noErrorsLogged=Virheitä ei ole kirjattu lokiin %S:n käynnistämisen jälkeen.
errorReport.advanceMessage=Paina %S lähettääksesi raportin Zoteron kehittäjille.
errorReport.stepsToReproduce=Virheen saa aikaan tekemällä näin:
errorReport.expectedResult=Odottamani lopputulos:
errorReport.actualResult=Todellinen lopputulos:
errorReport.noNetworkConnection=Ei verkkoyhteyttä
errorReport.invalidResponseRepository=Invalid response from repository
errorReport.repoCannotBeContacted=Repository cannot be contacted
errorReport.invalidResponseRepository=Virheellinen vastaus tyylivalikoimasta
errorReport.repoCannotBeContacted=Tyylivalikoimaan ei saada yhteyttä
attachmentBasePath.selectDir=Choose Base Directory
attachmentBasePath.chooseNewPath.title=Confirm New Base Directory
attachmentBasePath.chooseNewPath.message=Linked file attachments below this directory will be saved using relative paths.
attachmentBasePath.chooseNewPath.existingAttachments.singular=One existing attachment was found within the new base directory.
attachmentBasePath.chooseNewPath.existingAttachments.plural=%S existing attachments were found within the new base directory.
attachmentBasePath.chooseNewPath.button=Change Base Directory Setting
attachmentBasePath.clearBasePath.title=Revert to Absolute Paths
attachmentBasePath.clearBasePath.message=New linked file attachments will be saved using absolute paths.
attachmentBasePath.clearBasePath.existingAttachments.singular=One existing attachment within the old base directory will be converted to use an absolute path.
attachmentBasePath.clearBasePath.existingAttachments.plural=%S existing attachments within the old base directory will be converted to use absolute paths.
attachmentBasePath.clearBasePath.button=Clear Base Directory Setting
attachmentBasePath.selectDir=Valitse juurihakemisto
attachmentBasePath.chooseNewPath.title=Vahvista uusi juurihakemisto
attachmentBasePath.chooseNewPath.message=Linkatut tiedostoliitteet tämän hakemiston sisällä tallennetaan käyttäen suhteellisia polkuja.
attachmentBasePath.chooseNewPath.existingAttachments.singular=Yksi olemassaoleva liite löytyi juurikansion alta.
attachmentBasePath.chooseNewPath.existingAttachments.plural=%S olemassaolevaa liitettä löytyi juurikansion alta.
attachmentBasePath.chooseNewPath.button=Muuta juurihakemiston asetuksia
attachmentBasePath.clearBasePath.title=Palauta absoluuttiset polut
attachmentBasePath.clearBasePath.message=Uudet tiedostoliitteet tallennetaan absoluuttisia polkuja käyttäen.
attachmentBasePath.clearBasePath.existingAttachments.singular=Yksi olemassaoleva liite vanhassa juurikansiossa muunnetaan käyttämään absoluuttista polkua.
attachmentBasePath.clearBasePath.existingAttachments.plural=%S olemassaolevaa liitettä vanhassa juurikansiossa muutetaan käyttämään absoluuttisia polkuja.
attachmentBasePath.clearBasePath.button=Nollaa juurikansioasetus
dataDir.notFound=Zoteron datakansiota ei löytynyt.
dataDir.previousDir=Edellinen kansio:
@ -110,12 +110,12 @@ dataDir.useProfileDir=Käytä Firefoxin profiilikansiota
dataDir.selectDir=Valitse kansio Zoteron datalle
dataDir.selectedDirNonEmpty.title=Kansio ei ole tyhjä
dataDir.selectedDirNonEmpty.text=Valitsemasi kansio ei ole tyhjä eikä ilmeisesti Zoteron datakansio.\n\nLuodaanko Zoteron tiedot tähän kansioon siitä huolimatta?
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 move files from the existing data directory to the new location after %1$S has closed.
dataDir.selectedDirEmpty.title=Hakemisto on tyhjä
dataDir.selectedDirEmpty.text=Valitsemasi hakemisto on tyhjä. Siirtääksesi olemassaoleva Zoteron datahakemiston sinun pitää käsin siirtää tiedostot olemassaolevasta datahakemistosta uuteen sijaintiin, kunhan %1$S on sulkeutunut.
dataDir.selectedDirEmpty.useNewDir=Käytetäänkö uutta hakemistoa?
dataDir.moveFilesToNewLocation=Be sure to move files from your existing Zotero data directory to the new location before reopening %1$S.
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.moveFilesToNewLocation=Siirräthän tiedostot nykyisestä Zoteron datakansiosta uuteen sijaintiin ennen kuin avaat %1$S:n uudelleen.
dataDir.incompatibleDbVersion.title=Yhteensopimaton tietokantaversio
dataDir.incompatibleDbVersion.text=Valittu datahakemisto ei ole yhteensopiva Zotero Standalonen kanssa. Zotero Standalone voi jakaa tieokannan Zotero for Firefoxin version 2.1b3 tai uudemman kanssa.\n\nPäivitä Zotero for Firefox ensin uusimpaan versioon tai valitse toinen datakansio Zoteron Standalonen kanssa käytettäväksi.
dataDir.standaloneMigration.title=Aiempi Zotero-kirjasto löytyi
dataDir.standaloneMigration.description=Tämä vaikuttaa olevan ensimmäinen %1$S-kertasi. Haluatko, että %1$S tuo asetukset %2$S:sta ja käyttää aiempaa datahakemistoa?
dataDir.standaloneMigration.multipleProfiles=%1$S jakaa datahakemiston viimeisimmän käytetyn profiilin kanssa.
@ -148,7 +148,7 @@ date.relative.yearsAgo.multiple=%S vuotta sitten
pane.collections.delete.title=Poista kokoelma
pane.collections.delete=Haluatko varmasti poistaa valitun kokoelman?
pane.collections.delete.keepItems=Items within this collection will not be deleted.
pane.collections.delete.keepItems=Tässä kokoelmassa olevia nimikkeitä ei poisteta.
pane.collections.deleteWithItems.title=Poista kokoelma ja nimikkeet
pane.collections.deleteWithItems=Haluatko varmasti poistaa valitun kokoelman ja siirtää kaikki siihen kuuluvat nimikkeet roskakoriin?
@ -161,7 +161,7 @@ pane.collections.newSavedSeach=Uusi tallennettu haku
pane.collections.savedSearchName=Anna tälle tallennetulle haulle nimi:
pane.collections.rename=Anna kokoelmalle uusi nimi:
pane.collections.library=Oma Kirjasto
pane.collections.groupLibraries=Group Libraries
pane.collections.groupLibraries=Ryhmäkirjastot
pane.collections.trash=Roskakori
pane.collections.untitled=Nimetön
pane.collections.unfiled=Lajittelemattomat nimikkeet
@ -187,16 +187,16 @@ pane.tagSelector.delete.message=Haluatko varmasti poistaa tämän merkin?\n\nMer
pane.tagSelector.numSelected.none=0 merkkiä valittuna
pane.tagSelector.numSelected.singular=%S merkki valittuna
pane.tagSelector.numSelected.plural=%S merkkiä valittuna
pane.tagSelector.maxColoredTags=Only %S tags in each library can have colors assigned.
pane.tagSelector.maxColoredTags=Vain %S avainsanalla kussakin kirjastossa voi olla oma värinsä.
tagColorChooser.numberKeyInstructions=You can add this tag to selected items by pressing the $NUMBER key on the keyboard.
tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
tagColorChooser.numberKeyInstructions=Voit lisätä tämän avainsanan valittuihin nimikkeisiin painamalla $NUMBER-näppäintä.
tagColorChooser.maxTags=Enintään %S avainsanalla kussakin kirjastossa voi olla oma värinsä.
pane.items.loading=Ladataan kohdeluettelo...
pane.items.columnChooser.moreColumns=Lisää sarakkeita
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.columnChooser.secondarySort=Toissijainen lajittelu (%S)
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Siirrä roskakoriin
pane.items.trash=Haluatko varmasti siirtää valitun nimikkeen roskakoriin?
pane.items.trash.multiple=Haluatko varmasti siirtää valitut nimikkeet roskakoriin?
@ -233,15 +233,15 @@ pane.items.interview.manyParticipants=Haastattelu, tehneet %S ym.
pane.item.selected.zero=Ei valittuja kohteita
pane.item.selected.multiple=%S kohdetta valittuna
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.unselected.zero=Tässä näkymässä ei ole yhtään nimikettä
pane.item.unselected.singular=%S nimike tässä näkymässä
pane.item.unselected.plural=%S nimikettä tässä näkymässä
pane.item.duplicates.selectToMerge=Select items to merge
pane.item.duplicates.mergeItems=Merge %S items
pane.item.duplicates.writeAccessRequired=Library write access is required to merge items.
pane.item.duplicates.onlyTopLevel=Only top-level full items can be merged.
pane.item.duplicates.onlySameItemType=Merged items must all be of the same item type.
pane.item.duplicates.selectToMerge=Valitse yhteenliitettävät nimikkeet
pane.item.duplicates.mergeItems=Liitä yhteen %S nimikettä
pane.item.duplicates.writeAccessRequired=Nimikkeiden yhteenliittämiseen tarvitaan kirjoitusoikeus kirjastoon.
pane.item.duplicates.onlyTopLevel=Vain ylätason nimikkeitä voi liittää yhteen.
pane.item.duplicates.onlySameItemType=Yhteenliitettävien nimikkeiden tulee olla samaa tyyppiä.
pane.item.changeType.title=Vaihda kohteen tyyppi
pane.item.changeType.text=Haluatko varmasti vaihtaa kohteen tyypin?\n\nSeuraavat kentät menetetään:
@ -252,11 +252,11 @@ pane.item.switchFieldMode.one=Käytä vain yhtä kenttää
pane.item.switchFieldMode.two=Käytä kahta kenttää
pane.item.creator.moveUp=Siirrä ylös
pane.item.creator.moveDown=Siirrä alas
pane.item.notes.untitled=Otsikoimaton muistio
pane.item.notes.delete.confirm=Haluatko varmasti poistaa tämän muistion?
pane.item.notes.count.zero=%S muistiota:
pane.item.notes.count.singular=%S muistio:
pane.item.notes.count.plural=%S muistiota:
pane.item.notes.untitled=Otsikoimaton muistiinpano
pane.item.notes.delete.confirm=Haluatko varmasti poistaa tämän muistiinpanon?
pane.item.notes.count.zero=%S muistiinpanoa:
pane.item.notes.count.singular=%S muistiinpano:
pane.item.notes.count.plural=%S muistiinpanoa:
pane.item.attachments.rename.title=Uusi otsikko:
pane.item.attachments.rename.renameAssociatedFile=Nimeä liitetty tiedosto uudelleen
pane.item.attachments.rename.error=Virhe nimettäessä tiedostoa uudelleen.
@ -268,7 +268,7 @@ pane.item.attachments.count.singular=%S liite:
pane.item.attachments.count.plural=%S liitettä:
pane.item.attachments.select=Valitse tiedosto
pane.item.attachments.PDF.installTools.title=PDF-työkaluja ei ole asennettu
pane.item.attachments.PDF.installTools.text=To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.
pane.item.attachments.PDF.installTools.text=Jos haluat käyttää tätä ominaisuutta, asenna ensin PDF-työkalut Zoteron asetusten Haku-välilehdellä.
pane.item.attachments.filename=Tiedostonimi
pane.item.noteEditor.clickHere=napsauta tästä
pane.item.tags.count.zero=%S merkkiä:
@ -281,9 +281,9 @@ pane.item.related.count.singular=%S liittyvä:
pane.item.related.count.plural=%S liittyvää:
pane.item.parentItem=Ylänimike:
noteEditor.editNote=Muokkaa muistiota
noteEditor.editNote=Muokkaa muistiinpanoa
itemTypes.note=Muistio
itemTypes.note=Muistiinpano
itemTypes.attachment=Liite
itemTypes.book=Kirja
itemTypes.bookSection=Kirjan osa
@ -325,7 +325,7 @@ itemFields.title=Otsake
itemFields.dateAdded=Lisäyspäivä
itemFields.dateModified=Muokattu
itemFields.source=Lähde
itemFields.notes=Muistio
itemFields.notes=Muistiinpanot
itemFields.tags=Merkit
itemFields.attachments=Liitteet
itemFields.related=Liittyvät
@ -339,7 +339,7 @@ itemFields.place=Paikka
itemFields.publisher=Julkaisija
itemFields.pages=Sivuja
itemFields.ISBN=ISBN
itemFields.publicationTitle=Julkaisutiedot
itemFields.publicationTitle=Julkaisu
itemFields.ISSN=ISSN
itemFields.date=Päiväys
itemFields.section=Osio
@ -479,11 +479,11 @@ save.error.cannotAddFilesToCollection=Et voi lisätä tiedostoja valittuun kokoe
ingester.saveToZotero=Tallenna Zoteroon
ingester.saveToZoteroUsing=Tallentaan Zoteroon käyttäen "%S"
ingester.scraping=Saving Item...
ingester.scrapingTo=Saving to
ingester.scrapingTo=Tallennuskohde:
ingester.scrapeComplete=Nimike tallennettu
ingester.scrapeError=Nimikettä ei voitu tallentaa
ingester.scrapeErrorDescription=Nimikkeen tallentamisessa tapahtui virhe. Katso %S, jos haluat tietää lisää.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues
ingester.scrapeErrorDescription.linkText=Sivutulkkeihin liittyvien ongelmien selvittäminen
ingester.scrapeErrorDescription.previousError=Tallennusprosessi epäonnistui aiemman Zoteron virheen vuoksi.
ingester.importReferRISDialog.title=Zotero RIS/Refer-tuonti
@ -492,7 +492,7 @@ ingester.importReferRISDialog.checkMsg=Salli aina tälle sivustolle
ingester.importFile.title=Tuo tiedosto
ingester.importFile.text=Haluatko tuoda tiedoston "%S"?\n\nNimikkeet lisätään uuteen kokoelmaan.
ingester.importFile.intoNewCollection=Import into new collection
ingester.importFile.intoNewCollection=Tuo uuteen kokoelmaan
ingester.lookup.performing=Haku suoritetaan...
ingester.lookup.error=Hakua suoritettaessa tapahtui virhe.
@ -521,17 +521,17 @@ zotero.preferences.openurl.resolversFound.zero=%S linkkipalvelinta löytyi
zotero.preferences.openurl.resolversFound.singular=%S linkkipalvelin löytyi
zotero.preferences.openurl.resolversFound.plural=%S linkkipalvelinta löytyi
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.sync.purgeStorage.title=Siivotaanko liitetiedostot Zoteron palvelimilta?
zotero.preferences.sync.purgeStorage.desc=Jos aiot käyttää WebDAV-palvelinta tieodostojen synkronointiin ja olet aiemmin synkronoinut Oman kirjaston liitetiedostot Zoteron palvelimelle, voit siivota ne tiedostot Zoteron palvelimelta, jotta saat enemmän tallennustilaa ryhmille.\n\nVoit siivota tiedostot milloin tahansa tiliin asetuksista zotero.orgissa.
zotero.preferences.sync.purgeStorage.confirmButton=Siivoa tiedostot nyt
zotero.preferences.sync.purgeStorage.cancelButton=Älä siivoa tiedostoja
zotero.preferences.sync.reset.userInfoMissing=Sinun täytyy syöttää käyttäjätunnus ja salasana %S-välilehdellä ennen kuin voit käyttää nollauksen asetuksia.
zotero.preferences.sync.reset.restoreFromServer=Kaikki tiedot tästä Zotero-kopiosta poistetaan ja korvataan käyttäjälle '%S' kuuluvilla tiedoilla Zotero-palvelimella.
zotero.preferences.sync.reset.replaceLocalData=Korvaa paikalliset tiedot
zotero.preferences.sync.reset.restartToComplete=Firefox pitää käynnistää uudelleen palautusprosessin päättämiseksi.
zotero.preferences.sync.reset.restoreToServer=Kaikki käyttäjälle '%S' kuuluvat tiedot Zoteron palvelimella poistetaan ja korvataan tämän Zotero-kopion tiedoilla.\n\nKirjaston koosta riippuen saattaa kestää hetki, ennen kuin tiedot ovat käytettävissä palvelimella.
zotero.preferences.sync.reset.replaceServerData=Korvaa palvelimella olevat tiedot
zotero.preferences.sync.reset.fileSyncHistory=Koko synkronointihistoria poistetaan.\n\nKaikki paikalliset liitetiedostot, joita ei ole synkronointipalvelimella, lähetetään palvelimelle seuraavan synkronoinnin yhteydessä.
zotero.preferences.search.rebuildIndex=Luo indeksi uudelleen
zotero.preferences.search.rebuildWarning=Haluatko luoda koko indeksin uudelleen? Tämä saattaa kestää hetken.\n\nIndeksoidaksesi vain aiemmin indeksoimattomat nimikkeet käytä toimintoa %S.
@ -559,7 +559,7 @@ zotero.preferences.search.pdf.tryAgainOrViewManualInstructions=Yritä myöhemmin
zotero.preferences.export.quickCopy.bibStyles=Lähdeluettelotyylit
zotero.preferences.export.quickCopy.exportFormats=Vientimuodot
zotero.preferences.export.quickCopy.instructions=Pikakopioinnilla voit kopioida valitut viitteet leikepöydälle painamalla pikanäppäinyhdistelmää (%S) tai raahaamalla nimikkeet web-sivulla olevaan tekstilaatikkoon.
zotero.preferences.export.quickCopy.citationInstructions=For bibliography styles, you can copy citations or footnotes by pressing %S or holding down Shift before dragging items.
zotero.preferences.export.quickCopy.citationInstructions=Voit kopioda kirjallisuusviitetyylien mukaisia sitaatteja tai alaviitteitä painamalla %S tai pitämällä Shift-näppäintä pohjassa nimikkeitä raahatessa.
zotero.preferences.styles.addStyle=Lisää tyyli
zotero.preferences.advanced.resetTranslatorsAndStyles=Resetoi sivustotulkit ja tyylit
@ -569,9 +569,9 @@ zotero.preferences.advanced.resetTranslators.changesLost=Kaikki uudet tai muokat
zotero.preferences.advanced.resetStyles=Resetoi tyylit
zotero.preferences.advanced.resetStyles.changesLost=Kaikki uudet tai muokatut tyylit menetetään
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.
zotero.preferences.advanced.debug.title=Virheenkorjauksen tiedot toimitettu
zotero.preferences.advanced.debug.sent=Virheenkorjauksen tiedot on toimitettu Zotero-palvelimelle.\n\nVirheenkorjajuksen tunniste on D%S.
zotero.preferences.advanced.debug.error=Virhe lähetettäessä virheenkorjauksen tietoja.
dragAndDrop.existingFiles=Seuraavat tiedostot olivat jo valmiiksi kohdehakemistossa, ja niitä ei kopioitu:
dragAndDrop.filesNotFound=Seuraavia tiedostoja ei löytynyt eikä niitä voinut kopioida:
@ -582,8 +582,8 @@ fileInterface.import=Tuonti
fileInterface.export=Vienti
fileInterface.exportedItems=Viedyt nimikkeet
fileInterface.imported=Tuodut
fileInterface.unsupportedFormat=The selected file is not in a supported format.
fileInterface.viewSupportedFormats=View Supported Formats…
fileInterface.unsupportedFormat=Valitun tiedoston tiedostomuotoa ei tueta
fileInterface.viewSupportedFormats=Näytä tuetut tiedostomuodot...
fileInterface.untitledBibliography=Nimetön lähdeluettelo
fileInterface.bibliographyHTMLTitle=Lähdeluettelo
fileInterface.importError=Tapahtui virhe yrittäessä tuoda valittua tiedostoa. Varmista, että tiedosto on kunnossa, ja yritä uudelleen.
@ -592,7 +592,7 @@ fileInterface.noReferencesError=Valitsemissasi nimikkeissä ei ole viitteitä. V
fileInterface.bibliographyGenerationError=Lähdeluetteloa luotaessa tapahtui virhe. Yritä uudelleen.
fileInterface.exportError=Valittua tiedostoa vietäessä tapahtui virhe.
quickSearch.mode.titleCreatorYear=Title, Creator, Year
quickSearch.mode.titleCreatorYear=Otsikko, kirjoittaja, vuosi
quickSearch.mode.fieldsAndTags=Kaikki kentät ja avainsanat
quickSearch.mode.everything=Kaikki
@ -643,7 +643,7 @@ fulltext.indexState.partial=Osittain
exportOptions.exportNotes=Vientihuomiot
exportOptions.exportFileData=Vientitiedostot
exportOptions.useJournalAbbreviation=Use Journal Abbreviation
exportOptions.useJournalAbbreviation=Käytä aikakausjulkaisun lyhennettä
charset.UTF8withoutBOM=Unicode (UTF-8 ilman BOM)
charset.autoDetect=(automaattitunnistus)
@ -659,8 +659,8 @@ citation.multipleSources=Multiple Sources...
citation.singleSource=Single Source...
citation.showEditor=Show Editor...
citation.hideEditor=Hide Editor...
citation.citations=Citations
citation.notes=Notes
citation.citations=Sitaati
citation.notes=Muistiinpanot
report.title.default=Zotero-raportti
report.parentItem=Ylänimike:
@ -737,14 +737,14 @@ styles.installStyle=Asennetaanko tyyli "%1$S" lähteestä %2$S?
styles.updateStyle=Päivitetäänkö aiempi tyyli "%1$S" tyylillä "%2$S" lähteestä %3$S?
styles.installed=Tyyli "%S" asennettiin onnistuneesti.
styles.installError=%S ei vaikuta olevan kelvollinen tyylitiedosto.
styles.validationWarning="%S" is not a valid CSL 1.0.1 style file, and may not work properly with Zotero.\n\nAre you sure you want to continue?
styles.validationWarning="%S" ei ole kunnollinen CSL 1.0.1-tyylitiedosto, eikä se välttämättä toimi oikein Zoterossa.\n\nHaluatko varmasti jatkaa?
styles.installSourceError=%1$S viittaa epäkelpoon tai olemattoon CSL-tiedostoon %2$S.
styles.deleteStyle=Haluatko varmasti poistaa tyylin "%1$S"?
styles.deleteStyles=Haluatko varmasti poistaa valitut tyylit?
styles.abbreviations.title=Lataa lyhenteet
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.
styles.abbreviations.parseError=Lyhennetiedosto "%1$S" ei ole toimivassa JSON-muodossa.
styles.abbreviations.missingInfo=Lyhennetiedosto "%1$S" ei määrittele täydellistä informaatio-osiota.
sync.sync=Synkronoi
sync.cancel=Peruuta synkronointi
@ -756,58 +756,58 @@ sync.remoteObject=Etäobjekti
sync.mergedObject=Yhdistetty objekti
sync.error.usernameNotSet=Käyttäjänimeä ei määritetty
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.usernameNotSet.text=Syötä zotero.orgin käyttäjätunnus ja salasana Zoteron asetuksissa, jotta voit synkronoida tiedot Zotero-palvelimen kanssa.
sync.error.passwordNotSet=Salasanaa ei määritetty
sync.error.invalidLogin=Virheellinen käyttäjänimi tai salasana
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.invalidLogin.text=Zoteron synkronointipalvelin ei hyväksynyt käyttäjätunnustasi ja/tai salasanaasi.\n\nTarkista, että olet antanut käyttäjätiedot oikein Zoteron synkronointiasetuksissa.
sync.error.enterPassword=Anna salasana.
sync.error.loginManagerInaccessible=Zotero ei saanut oikeuksia kirjautumistietoihisi.
sync.error.checkMasterPassword=If you are using a master password in %S, make sure you have entered it successfully.
sync.error.corruptedLoginManager=This could also be due to a corrupted %1$S login manager database. To check, close %1$S, remove signons.sqlite from your %1$S profile directory, and re-enter your Zotero login information in the Sync pane of the Zotero preferences.
sync.error.loginManagerCorrupted1=Zotero cannot access your login information, possibly due to a corrupted %S login manager database.
sync.error.loginManagerCorrupted2=Close %1$S, remove signons.sqlite from your %2$S profile directory, and re-enter your Zotero login information in the Sync pane of the Zotero preferences.
sync.error.checkMasterPassword=Jos käytät pääsalasanaa $S:ssa, varmista, että se on oikein.
sync.error.corruptedLoginManager=Kyse voi olla myös virheestä %1$S:n kirjautumistietojen tietokannassa. Voit tarkistaa tämän sulkemalla ensin %1$S:n, poistamalla tiedoston signons.sqlite %1$S:n profiilikansiosta ja syöttämällä tämän jälkeen Zoteron kirjautumistiedot uudelleen Zoteron asetusten synkronointivälilehdellä.
sync.error.loginManagerCorrupted1=Zotero ei voi käyttää kirjautumistietojasi. %S:n kirjautumistietojen tietokanta on mahdollisesti vioittunut.
sync.error.loginManagerCorrupted2=Sulje %1$S, poista signons.sqlite %2$S:n profiilikansiosta, ja syötä sen jälkeen Zoteron kirjautumistiedot uudelleen Zoteron asetusten Synkronointi-välilehdelä.
sync.error.syncInProgress=Synkronointi on jo käynnissä.
sync.error.syncInProgress.wait=Wait for the previous sync to complete or restart Firefox.
sync.error.writeAccessLost=You no longer have write access to the Zotero group '%S', and items you've added or edited cannot be synced to the server.
sync.error.writeAccessLost=Sinulla ei enää ole kirjoitusoikeutta Zotero-ryhmään '%S'. Lisäämiäsi tai muokkaamiasi nimikkeitä ei voida synkronoida palvelimelle.
sync.error.groupWillBeReset=Jos jatkat, kopiosi ryhmästä resetoituu siihen tilaan, missä se palvelimella on. Paikalliset muokkaukset nimikkeisiin ja tiedostoihin menetetään.
sync.error.copyChangedItems=Jos haluat mahdollisuuden kopioida tekemäsi muutokset muualle tai pyytää kirjoitusoikeutta ryhmän ylläpitäjältä, peruuta synkronointi nyt.
sync.error.manualInterventionRequired=Automaattinen synkronointi johti konfliktiin, joka vaatii manuaalista väliintuloa.
sync.error.clickSyncIcon=Paina synkronointikuvaketta aloittaaksesi synkronoinnin manuaalisesti.
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.error.invalidClock=Järjestelmän kellonaika on virheellinen. Sinun täytyy korjata se, että synkronointi toimisi.
sync.error.sslConnectionError=SSL-yhteyden virhe
sync.error.checkConnection=Virhe yhdistettäessä palvelimeen. Tarkista Internet-yhteytesi.
sync.error.emptyResponseServer=Palvelin antoi tyhjän vastauksen.
sync.error.invalidCharsFilename=Tiedostonimessä '%S' on virheellisiä kirjaimia.\n\nVaihda tiedostonimi ja yritä uudelleen. Jos vaihdat tiedostonimeä käyttöjärjestelmän kautta, sinun täytyy linkata tiedosto uudelleen Zoteroon.
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.lastSyncWithDifferentAccount=Tämä Zotero-tietokanta synkronoitiin edellisen kerran zotero.org-tilin ('%1$S') kanssa kuin nykyinen ('%2$S').
sync.localDataWillBeCombined=Jos jatkat, paikalliset Zotero-tiedot yhdistetään palvelimella olevien tilin '%S' tietojen kanssa.
sync.localGroupsWillBeRemoved1=Paikalliset ryhmät myös ne, joissa on muuttuneita nimikkeitä poistetaan myös.
sync.avoidCombiningData=Jos haluat välttää tietojen yhdistämisen ja/tai menettämisen, palaa tiliin '%S' tai käytä Nollaa asetukset -toimintoa Zoteron synkronointiasetuksissa.
sync.localGroupsWillBeRemoved2=Jos jatkat, paikalliset ryhmät myös ne, joissa on muuttuneita nimikkeitä poistetaan ja korvataan tiliin '%1$S' liitetyillä ryhmillä.\n\nVälttääksesi paikalliset muutokset ryhmiin, varmista, että olet synkronoinut tilin '€2$S' ennen tiliä '%1$S'.
sync.conflict.autoChange.alert=One or more locally deleted Zotero %S have been modified remotely since the last sync.
sync.conflict.autoChange.log=A Zotero %S has changed both locally and remotely since the last sync:
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=View the %S Error Console for the full list of such changes.
sync.conflict.localVersion=Local version: %S
sync.conflict.remoteVersion=Remote version: %S
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.
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.autoChange.alert=Yhtä tai useampaa paikallisesti poistettua Zotero-%S on muokattu toisaalla edellisen synkronoinnin jälkeen.
sync.conflict.autoChange.log=Zotero-%S:n paikallinen sekä palvelimella oleva versio on muuttunut edellisen synkronoinnin jälkeen.
sync.conflict.remoteVersionsKept=Palvelimella olevat versiot säilytettiin.
sync.conflict.remoteVersionKept=Palvelimella oleva versio säilytettiin.
sync.conflict.localVersionsKept=Paikalliset versiot säilytettiin.
sync.conflict.localVersionKept=Paikallinen versio säilytettiin.
sync.conflict.recentVersionsKept=Uusimmat versiot säilytettiin.
sync.conflict.recentVersionKept=Uusin versio, '%S', säilytettiin.
sync.conflict.viewErrorConsole=Voit katsoa täydellisen luettelon muutoksista %S:n virhekonsolissa.
sync.conflict.localVersion=Paikallinen versio: %S
sync.conflict.remoteVersion=Etäversio: %S
sync.conflict.deleted=[poistettu]
sync.conflict.collectionItemMerge.alert=Yksi tai useampi Zotero-nimike on lisätty samaan kokoelmaan tai poistettu samasta kokoelmasta useilla eri tietokoneilla edellisen synkronoinnin jälkeen.
sync.conflict.collectionItemMerge.log=Zotero-nimikkeitä kokoelmassa '%S' on lisätty tai poistettu useilla eri tietokoneilla edellisen synkronoinnin jälkeen. Seuraavat nimikkeet lisättiin kokoelmaan:
sync.conflict.tagItemMerge.alert=Yksi tai useampi Zotero-avainsana on poistettu nimikkeistä tai lisätty nimikkeisiin useilla eri tietokoneilla edellisen synkronoinnin jälkeen. Avainsananiput on nyt yhdistetty toisiinsa.
sync.conflict.tagItemMerge.log=Zotero-avainsana '%S' on lisätty nimikkeisiin tai poistettu nimikkeistä useilla eri tietokoneilla edelisen synkronoinnin jälkeen.
sync.conflict.tag.addedToRemote=Se on nyt lisätty seuraaviin palvelimella oleviin nimikkeisiin:
sync.conflict.tag.addedToLocal=Se on nyt lisätty seuraaviin paikallisiin nimikkeisiin:
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=Choose the version you would like to keep, and then click %S.
sync.conflict.chooseThisVersion=Choose this version
sync.conflict.fileChanged=Seuraavaa tiedostoa on muokattu useassa eri paikassa.
sync.conflict.itemChanged=Seuraavaa nimikettä on muokattu. useassa eri paikassa.
sync.conflict.chooseVersionToKeep=Valitse versio, jonka haluat säilyttää, ja paina &S
sync.conflict.chooseThisVersion=Valitse tämä versio
sync.status.notYetSynced=Ei vielä synkronoitu
sync.status.lastSync=Viimeisin synkronointi:
@ -818,12 +818,12 @@ sync.status.uploadingData=Siirretään tietoja synkronointipalvelimelle
sync.status.uploadAccepted=Tiedonsiirto hyväksytty \u2014 odotetaan synkronointipalvelinta
sync.status.syncingFiles=Synkronoidaan tiedostoja
sync.fulltext.upgradePrompt.title=New: Full-Text Content Syncing
sync.fulltext.upgradePrompt.text=Zotero can now sync the full-text content of files in your Zotero libraries with zotero.org and other linked devices, allowing you to easily search for your files wherever you are. The full-text content of your files will not be shared publicly.
sync.fulltext.upgradePrompt.changeLater=You can change this setting later from the Sync pane of the Zotero preferences.
sync.fulltext.upgradePrompt.enable=Use Full-Text Syncing
sync.fulltext.upgradePrompt.title=Uutta: Kokotekstisisällön synkronisointi
sync.fulltext.upgradePrompt.text=Zotero voi nyt synkronoida Zotero-kirjastossa olevien tiedostojen kokotekstisisällön zotero.orgin ja tiliin kytkettyjen laitteiden kanssa, joten voit helposti suorittaa hakuja tiedostoista missä ikinä oletkin. Tiedostojen kokotekstisisältöä ei jaeta julkisesti.
sync.fulltext.upgradePrompt.changeLater=Voit myöhemmin muuttaa tätä asetusta Zoteron asetusten Synkronointi-välilehdellä.
sync.fulltext.upgradePrompt.enable=Käytä kokotekstien synkronisointia
sync.storage.mbRemaining=%SMB remaining
sync.storage.mbRemaining=%S Mt jäljellä
sync.storage.kbRemaining=%S kt jäljellä
sync.storage.filesRemaining=%1$S/%2$S tiedostoa
sync.storage.none=Ei mitään
@ -836,14 +836,14 @@ sync.storage.serverConfigurationVerified=Palvelinasetukset varmistettu
sync.storage.fileSyncSetUp=Tiedostosynkronisaatio on nyt määritetty.
sync.storage.openAccountSettings=Avaa tilin asetukset
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.default=Tiedostojen synkronointivirhe. Yritä synkronointia uudelleen.\n\nJos saat tämän virheilmoituksen toistuvasti, käynnistä %S ja/tai tietokone uudelleen, ja yritä sitten uudestaan. Jos ilmoitus toistuu senkin jälkeen, lähetä virheraportti ja kirjoita Zoteron keskustelualueelle viesti, jossa mainitset virheraportin tunnuksen.
sync.storage.error.defaultRestart=Tiedostojen synkronointivirhe. Käynnistä %S ja/tai tietokone uudelleen, ja yritä sitten synkronointia uudestaan.\n\nJos ilmoitus toistuu, lähetä virheraportti ja kirjoita Zoteron keskustelualueelle viesti, jossa mainitset virheraportin tunnuksen.
sync.storage.error.serverCouldNotBeReached=Palvelinta %S ei voitu tavoittaa.
sync.storage.error.permissionDeniedAtAddress=Sinulle ei ole oikeutta luoda Zotero-kansiota osoitteeseen:
sync.storage.error.checkFileSyncSettings=Tarkista tiedostojen synkronoinnin asetukset tai ota yhteyttä palvelimesi ylläpitäjään.
sync.storage.error.verificationFailed=%S tarkistus epäonnistui. Tarkista tiedostojen synkronointiasetukset Zoteron asetusten Synkronisaatio-välilehdeltä.
sync.storage.error.fileNotCreated=Tiedostoa '%S' ei voitu luoda Zoteron 'storage'-kansioon.
sync.storage.error.encryptedFilenames=Error creating file '%S'.\n\nSee http://www.zotero.org/support/kb/encrypted_filenames for more information.
sync.storage.error.encryptedFilenames=Virhe luodessa tiedostoa '%S'.\n\nKatso lisätietoja osoitteesta http://www.zotero.org/support/kb/encrypted_filenames.
sync.storage.error.fileEditingAccessLost=Sinulle ei enää ole muokkausoikeutta Zoteron ryhmään '%S', joten lisäämiäsi tai muokkaamiasi tiedostoja ei voida synkronoida palvelimelle.
sync.storage.error.copyChangedItems=Jos haluat säilyttää mahdollisuuden kopioida muutetut nimikkeet ja tiedostot muualle, peruuta synkronointi nyt.
sync.storage.error.fileUploadFailed=Tiedostojen siirto palvelimelle epäonnistui.
@ -851,9 +851,9 @@ sync.storage.error.directoryNotFound=Kansiota ei löytynyt
sync.storage.error.doesNotExist=Sijaintia %S ei ole olemassa.
sync.storage.error.createNow=Haluatko luoda sen nyt?
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.default=Virhe WebDAV-tiedostosynkronoinnissa. Yritä synkronointia uudelleen.\n\nJos saat tämän viestin toistuvasti, tarkista WebDAV-palvelimen asetukset Zoteron asetusten Synkronointi-välilehdellä.
sync.storage.error.webdav.defaultRestart=Virhe WebDAV-tiedostosynkronoinnissa. Käynnistä %S uudelleen ja yritä synkronointia uudestaan.\n\nJos saat tämän viestin toistuvasti, tarkista WebDAV-palvelimen asetukset Zoteron asetusten Synkronointi-välilehdellä.
sync.storage.error.webdav.enterURL=Anna WebDAV-palvelimen URL
sync.storage.error.webdav.invalidURL=%S ei ole kelvollinen WebDAV-osoite.
sync.storage.error.webdav.invalidLogin=WebDAV-palvelin ei hyväksynyt antamaasi käyttäjätunnusta ja salasanaa.
sync.storage.error.webdav.permissionDenied=Sinulla ei ole käyttöoikeutta WebDAV-palvelimen sijaintiin %S.
@ -863,18 +863,18 @@ sync.storage.error.webdav.sslConnectionError=SSL-yhteysvirhe yhdistettäessä ko
sync.storage.error.webdav.loadURLForMoreInfo=Lataa WebDAV-osoite nettiselaimessa saadaksesi lisätietoja
sync.storage.error.webdav.seeCertOverrideDocumentation=Katso lisätietoja sertifikaatin ohittamisen ohjeista.
sync.storage.error.webdav.loadURL=Lataa WebDAV-osoite
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.nonexistentFileNotMissing=Your WebDAV server is claiming that a nonexistent file exists. Contact your WebDAV server administrator for assistance.
sync.storage.error.webdav.serverConfig.title=WebDAV Server Configuration Error
sync.storage.error.webdav.serverConfig=Your WebDAV server returned an internal error.
sync.storage.error.webdav.fileMissingAfterUpload=Synkronoinnissa WebDAV-palvelimen kanssa saattaa olla ongelma.\n\nLähetetty tiedosto ei ollut välittömästi valminaa ladattavaksi. Tiedostojen lähettämisen ja niiden saataville tulemisen välillä saattaa olla pieni viive, etenkin jos käytät tallennukseen pilvipalveluita.\n\nJos Zoteron tiedostosynkronointi vaikuttaa toimivan normaalista, voit ohittaa tämän virheilmoituksen. Jos ongelmia ilmenee, lähetä viesti Zoteron keskustelualueelle.
sync.storage.error.webdav.nonexistentFileNotMissing=WebDAV-palvelin ilmoittaa olemassaolevan tiedoston olemassaolevaksi. Ota yhteyttä palvelimen ylläpitäjään.
sync.storage.error.webdav.serverConfig.title=WebDAV-palvelimen konfigurointivirhe
sync.storage.error.webdav.serverConfig=WebDAV-palvelin ilmoitti sisäisestä virhetilasta.
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.restart=Tiedostojen synkronointivirhe. Käynnistä %S ja/tai tietokone uudelleen ja yritä synkronointia uudestaan.\n\nJos ongelma toistuu, tietokoneessa tai verkkoyhteydessä saattaa olla vikaa, jonka saattaa aiheuttaa esimerkiksi tietoturvaohjelma, välityspalvelin, VPN tms. Kokeile poistaa tietoturva-/palomuuriohjelma käytöstä, tai jos kyseessä on kannettava tietokone, kokeile eri verkkoa.
sync.storage.error.zfs.tooManyQueuedUploads=Sinulla on liian monta tiedostojen lähetystä jonossa. Yritä uudelleen %S minuutin kuluttua.
sync.storage.error.zfs.personalQuotaReached1=Kiintiö palvelimelle tallennettaville tiedostoille on tullut täyteen. Osa tiedoista jäi siirtämättä. Muu Zotero-aineisto synkronoituu edelleen palvelimelle.
sync.storage.error.zfs.personalQuotaReached2=Tutustu tallennustilan lisäpalveluihin osoitteessa zotero.org.
sync.storage.error.zfs.groupQuotaReached1=Ryhmän '%S' kiintiö palvelimelle tallennettaville tiedostoille on tullut täyteen. Osa tiedoista jäi siirtämättä. Muu Zotero-aineisto synkronoituu edelleen palvelimelle.
sync.storage.error.zfs.groupQuotaReached2=Ryhmän omistaja voi lisätä ryhmän tallennustilaa osoitteessa zotero.org.
sync.storage.error.zfs.fileWouldExceedQuota=The file '%S' would exceed your Zotero File Storage quota
sync.storage.error.zfs.fileWouldExceedQuota=Tiedosto '%S' ylittäisi Zoteron tiedostontallennuskiintiösi.
sync.longTagFixer.saveTag=Tallenna merkki
sync.longTagFixer.saveTags=Tallenna merkit
@ -898,16 +898,16 @@ proxies.recognized.add=Lisää välityspalvelin
recognizePDF.noOCR=PDF-tiedosto ei sisällä OCRed-tekstiä.
recognizePDF.couldNotRead=PDF-tiedoston tekstiä ei voi lukea.
recognizePDF.noMatches=No matching references found
recognizePDF.noMatches=Vastaavia nimikkeitä ei löytynyt
recognizePDF.fileNotFound=Tiedostoa ei löytynyt
recognizePDF.limit=Google Scholar query limit reached. Try again later.
recognizePDF.limit=Google Scholarin asettama raja hakumäärille ylitetty. Yritä myöhemmin uudestaan.
recognizePDF.error=Tapahtui odottamaton virhe.
recognizePDF.stopped=Peruttu
recognizePDF.complete.label=Metadata on haettu
recognizePDF.cancelled.label=Metadata Retrieval Cancelled
recognizePDF.cancelled.label=Metadatan hakeminen peruttu
recognizePDF.close.label=Sulje
recognizePDF.captcha.title=Please enter CAPTCHA
recognizePDF.captcha.description=Zotero uses Google Scholar to help identify PDFs. To continue using Google Scholar, please enter the text from the image below.
recognizePDF.captcha.title=Syötä kuvavarmennus
recognizePDF.captcha.description=Zotero käyttää Google Scholaria PDF-tiedostojen tunnistamiseen. Jatkaaksesi Google Scholarin käyttöä, kirjoita laatikkoon kuvassa näkyvä teksti.
rtfScan.openTitle=Valitse käsiteltävä tiedosto
rtfScan.scanning.label=Scanning RTF Document...
@ -917,20 +917,20 @@ rtfScan.saveTitle=Valitse muotoillun tiedoston tallennuksen kohde
rtfScan.scannedFileSuffix=(Skannattu)
file.accessError.theFile=The file '%S'
file.accessError.theFile=Tiedosto '%S'
file.accessError.aFile=Tiedosto
file.accessError.cannotBe=ei voi olla
file.accessError.created=luotu
file.accessError.updated=päivitetty
file.accessError.deleted=poistettu
file.accessError.message.windows=Check that the file is not currently in use, that its permissions allow write access, and that it has a valid filename.
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
file.accessError.message.windows=Tarkista, että tiedosto ei ole tällä hetkellä käytössä, että siihen on kirjoitusoikeudet, ja että sillä on sallittu tiedostonimi.
file.accessError.message.other=Tarkista, että tiedosto ei ole käytössä ja että siihen on kirjoitusoikeudet.
file.accessError.restart=Voit yrittää myös käynnistää tietokoneen uudelleen tai poistaa suojausohjelman käytöstä.
file.accessError.showParentDir=Näytä sisältävä hakemisto
lookup.failure.title=Haku epäonnistui
lookup.failure.description=Zotero ei löytänyt annettua tunnistetta rekistereistä. Tarkista tunniste ja yritä uudelleen.
lookup.failureToID.description=Zotero could not find any identifiers in your input. Please verify your input and try again.
lookup.failureToID.description=Zotero ei löytänyt mitään tunnisteita syötteestäsi. Tarkista syöte ja yritä uudelleen.
locate.online.label=Katso verkossa
locate.online.tooltip=Hae tämä nimike verkosta
@ -953,18 +953,18 @@ locate.manageLocateEngines=Manage Lookup Engines...
standalone.corruptInstallation=Zotero Standalone -asennuksesi vaikuttaa olevan vioittunut epäonnistuneessa automaattipäivityksessä. Zotero saattaa jatkaa toimintaansa, mutta mahdollisten virheiden välttämiseksi suosittelemme lataamaan Zotero Standalonen uusimman version osoitteesta http://zotero.org/support/standalone mahdollisimman pian.
standalone.addonInstallationFailed.title=Lisäosan asennus epäonnistui
standalone.addonInstallationFailed.body=Lisäosaa "%S" ei voitu asentaa. Se saattaa olla yhteensopimaton tämän Zotero Standalone -version kanssa.
standalone.rootWarning=You appear to be running Zotero Standalone as root. This is insecure and may prevent Zotero from functioning when launched from your user account.\n\nIf you wish to install an automatic update, modify the Zotero program directory to be writeable by your user account.
standalone.rootWarning.exit=Exit
standalone.rootWarning.continue=Continue
standalone.updateMessage=A recommended update is available, but you do not have permission to install it. To update automatically, modify the Zotero program directory to be writeable by your user account.
standalone.rootWarning=Käytät ilmeisesti Zotero Standalonea järjestelmänvalvojan oikeuksilla. Tämä ei ole turvallista, ja se voi estää Zoteroa toimimasta oikein, kun se käynnistetään tavallisen käyttäjän oikeuksilla.\n\nJos haluat asentaa automaattisen päivityksen, lisää tavalliselle käyttäjälle kirjoitusoikeudet Zoteron ohjelmakansioon.
standalone.rootWarning.exit=Poistu
standalone.rootWarning.continue=atka
standalone.updateMessage=Suositeltu päivitys on saatavilla, mutta sinulla ei ole oikeuksia sen asentamiseen. Asentaaksesi päivitykset automaattiset, lisää käyttäjätilillesi kirjoitusoikeus Zoteron ohjelmakansioon.
connector.error.title=Zotero Connector -ongelma.
connector.standaloneOpen=Tietokantaasi ei saada yhteyttä, koska Zotero Standalone on tällä hetkellä auki. Käytä Zotero Standalonea nimikkeidesi tarkasteluun.
connector.loadInProgress=Zotero Standalone was launched but is not accessible. If you experienced an error opening Zotero Standalone, restart Firefox.
connector.loadInProgress=Zotero Standalone on käynnistettiin, mutta se ei ole käytettävissä. Jos Zotero Standalonen käynnistämiseen liittyi virhe, käynnistä Firefox uudestaan.
firstRunGuidance.saveIcon=Zotero tunnistaa viitteen tällä sivulla. Paina osoitepalkin kuvaketta tallentaaksesi viitteen Zotero-kirjastoon.
firstRunGuidance.authorMenu=Zoterossa voit myös määritellä teoksen toimittajat ja kääntäjät. Voit muuttaa kirjoittajan toimittajaksi tai kääntäjäksi tästä valikosta.
firstRunGuidance.quickFormat=Kirjoita otsikko tai tekijä etsiäksesi viitettä.\n\nKun olet tehnyt valinnan, klikkaa kuplaa tai paina Ctrl-\u2193 lisätäksesi sivunumerot sekä etu- ja jälkiliitteet. Voit myös sisällyttää sivunumeron hakutermien mukana lisätäksesi sen suoraan.\n\nVoit muokata sitaatteja suoraan tekstinkäsittelyohjelman asiakirjassa.
firstRunGuidance.quickFormatMac=Kirjoita otsikko tai tekijä etsiäksesi viitettä.\n\nKun olet tehnyt valinnan, klikkaa kuplaa tai paina Ctrl-\u2193 lisätäksesi sivunumerot sekä etu- ja jälkiliitteet. Voit myös sisällyttää sivunumeron hakutermien mukana lisätäksesi sen suoraan.\n\nVoit muokata sitaatteja suoraan tekstinkäsittelyohjelman asiakirjassa.
firstRunGuidance.toolbarButton.new=Click here 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.toolbarButton.new=Paina tästä avataksesi Zoteron, tai käyttää %S-näppäinoikotietä.
firstRunGuidance.toolbarButton.upgrade=Zoteron kuvake on nyt Firefoxin työkalurivillä. Paina kuvaketta avataksesi Zoteron, tai käytä %S-näppäinoikotietä.

View file

@ -81,10 +81,10 @@
<!ENTITY zotero.items.menu.attach.note "Ajouter une note">
<!ENTITY zotero.items.menu.attach "Ajouter une pièce jointe">
<!ENTITY zotero.items.menu.attach.snapshot "Joindre une capture de la page courante">
<!ENTITY zotero.items.menu.attach.link "Joindre le lien vers la page courante">
<!ENTITY zotero.items.menu.attach.link.uri "Joindre le lien vers l'URI…">
<!ENTITY zotero.items.menu.attach.file "Joindre une copie enregistrée du fichier…">
<!ENTITY zotero.items.menu.attach.fileLink "Joindre un lien vers le fichier…">
<!ENTITY zotero.items.menu.attach.link "Joindre un lien vers la page courante">
<!ENTITY zotero.items.menu.attach.link.uri "Joindre un lien vers un URI…">
<!ENTITY zotero.items.menu.attach.file "Joindre une copie enregistrée d'un fichier…">
<!ENTITY zotero.items.menu.attach.fileLink "Joindre un lien vers un fichier…">
<!ENTITY zotero.items.menu.restoreToLibrary "Restaurer vers la bibliothèque">
<!ENTITY zotero.items.menu.duplicateItem "Dupliquer le document">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Enregistrer dans Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Les pièces jointes ne peuvent pas être enregistrées dans la bibliothèque sélectionnée. Ce document sera enregistré dans votre bibliothèque à la place.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Pour utiliser cette fonctionnalité, vous devez d'abord installer les outils PDF depuis le panneau Recherche des préférences de Zotero.">
<!ENTITY zotero.attachLink.title "Joindre un lien vers un URI">
<!ENTITY zotero.attachLink.label.link "Lien :">
<!ENTITY zotero.attachLink.label.title "Titre :">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Jusqu'à %S marqueurs dans chaque bibliothèque peuvent
pane.items.loading=Chargement de la liste des objets…
pane.items.columnChooser.moreColumns=Plus de colonnes
pane.items.columnChooser.secondarySort=Critère de tri secondaire (%S)
pane.items.attach.link.uri.title=Joindre un lien vers l'URI
pane.items.attach.link.uri=Saisissez une URI :
pane.items.attach.link.uri.unrecognized=Zotero n'a pas reconnu l'URI que vous avez saisi. Vérifiez l'adresse et ré-essayez.
pane.items.attach.link.uri.file=Pour joindre un lien vers un fichier, utilisez plutôt “%S”.
pane.items.trash.title=Mettre à la corbeille
pane.items.trash=Voulez-vous vraiment mettre le document sélectionné à la corbeille ?
pane.items.trash.multiple=Voulez-vous vraiment mettre les documents sélectionnés à la corbeille ?
@ -365,7 +365,7 @@ itemFields.numberOfVolumes=Nb de volumes
itemFields.committee=Commission
itemFields.assignee=Cessionnaire
itemFields.patentNumber=N° de brevet
itemFields.priorityNumbers=Ordre de priorité
itemFields.priorityNumbers=Numéros de priorité
itemFields.issueDate=Date de parution
itemFields.references=Références
itemFields.legalStatus=Statut légal

View file

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Nome:">
<!ENTITY zotero.search.searchInLibrary "Search in library:">
<!ENTITY zotero.search.searchInLibrary "Buscar na librería:">
<!ENTITY zotero.search.joinMode.prefix "Comparar con">
<!ENTITY zotero.search.joinMode.any "calquera">

View file

@ -8,7 +8,7 @@
<!ENTITY zotero.general.cancel "Cancelar">
<!ENTITY zotero.errorReport.title "Informe de erros de Zotero">
<!ENTITY zotero.errorReport.unrelatedMessages "This may include messages unrelated to Zotero.">
<!ENTITY zotero.errorReport.unrelatedMessages "Isto pode conter mensaxes que non estean relacionadas con Zotero.">
<!ENTITY zotero.errorReport.submissionInProgress "Espere mentres que se presenta o informe de erro.">
<!ENTITY zotero.errorReport.submitted "Presentouse o informe de erro .">
<!ENTITY zotero.errorReport.reportID "ID do informe:">
@ -45,7 +45,7 @@
<!ENTITY zotero.collections.showUnfiledItems "Mostrar os elementos sen cubrir">
<!ENTITY zotero.items.itemType "Tipo de elemento">
<!ENTITY zotero.items.type_column "Item Type">
<!ENTITY zotero.items.type_column "Tipo de elemento">
<!ENTITY zotero.items.title_column "Título">
<!ENTITY zotero.items.creator_column "Creador">
<!ENTITY zotero.items.date_column "Data">
@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Gardar en Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Os anexos non se poden gardar na librería que se escolleu. En vez de alí, ese documento gardarase na súa biblioteca.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Para empregar esta característica ten que instalar primeiro as ferramentas de PDF dende as preferencias de Zotero.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -81,9 +81,9 @@ upgrade.couldNotMigrate.restart=Reinicie o ordenador se continúa a recibir esta
errorReport.reportError=Informar dun erro ...
errorReport.reportErrors=Informar de erros ...
errorReport.reportInstructions=Pode informar deste erro seleccionando «%S» no menú de accións.
errorReport.followingReportWillBeSubmitted=The following report will be submitted:
errorReport.noErrorsLogged=No errors have been logged since %S started.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers.
errorReport.followingReportWillBeSubmitted=O informe que se vai a enviar é este:
errorReport.noErrorsLogged=Non se rexistraron erros dende que %S se iniciou.
errorReport.advanceMessage=Preme %S para enviarlle o informe aos desenvolvedores de Zotero.
errorReport.stepsToReproduce=Pasos a reproducir:
errorReport.expectedResult=Resultado esperado:
errorReport.actualResult=Resultado real:
@ -193,10 +193,10 @@ tagColorChooser.numberKeyInstructions=Podes engadir esta etiqueta para seleccion
tagColorChooser.maxTags=Só ata %S etiquetas de cada biblioteca poden ter cores asignadas.
pane.items.loading=Cargando a lista de elementos ...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Anexar a ligazón á URI
pane.items.attach.link.uri=Introducir unha URI:
pane.items.columnChooser.moreColumns=Máis columnas
pane.items.columnChooser.secondarySort=Modo de aliñamento (%S)
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Mover ao lixo
pane.items.trash=Seguro que quere mover o elemento seleccionado ao lixo?
pane.items.trash.multiple=Seguro que quere mover os elementos seleccionados ao lixo?
@ -483,7 +483,7 @@ ingester.scrapingTo=Gardando en
ingester.scrapeComplete=Gardouse o elemento
ingester.scrapeError=Non se puido gardar o elemento
ingester.scrapeErrorDescription=Produciuse un erro ao gardalo. Comprobe %S para obter máis información.
ingester.scrapeErrorDescription.linkText=Troubleshooting Translator Issues
ingester.scrapeErrorDescription.linkText=Informe de erros sobre das traducións
ingester.scrapeErrorDescription.previousError=O proceso de gardado fallou debido a un erro previo de Zotero.
ingester.importReferRISDialog.title=Importar RIS/Refer para Zotero
@ -966,5 +966,5 @@ firstRunGuidance.saveIcon=Zotero recoñece unha referencia nesta páxina. Faga c
firstRunGuidance.authorMenu=Zotero permítelle ademais especificar os editores e tradutores. Escolléndoo neste menú pode asignar a un autor como editor ou tradutor.
firstRunGuidance.quickFormat=Teclee un título ou autor para buscar unha referencia.\n\nDespois de facer a selección faga clic na burbulla ou prema Ctrl-\↓ para engadir números de páxina, prefixos ou sufixos. Así mesmo, pode incluír un número de páxina cos datos de busca e engadilo directamente.\n\Ademais, pode editar citas directamente dende o procesador de documentos de texto.
firstRunGuidance.quickFormatMac=Teclee un título de autor para facer unha busca dunha referencia.\n\nDespois de ter feito a selección prema na burbulla ou prema Cmd-\↓ para engadir os números de páxina, prefixos ou sufixos. Igualmente, pode incluír un número de páxina co seus termos de busca empregados e engadilo directamente.\n\nPode ademais editar citas directamente desde o procesador de documentos de textos.
firstRunGuidance.toolbarButton.new=Click here 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.toolbarButton.new=Para abrir Zotero preme aquí ou usa o atallo de teclado %S
firstRunGuidance.toolbarButton.upgrade=A icona de Zotero pódese atopar na barra de ferramentas do Firefox. Preme na icona de Zotero para abrilo ou usa o atallo de teclado %S.

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=טוען רשימת פריטים...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
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?

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Save to Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Loading items list...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
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?

View file

@ -90,7 +90,7 @@
<!ENTITY zotero.items.menu.duplicateItem "Kiválasztott elem duplikálása">
<!ENTITY zotero.items.menu.mergeItems "Elemek összefésülése…">
<!ENTITY zotero.duplicatesMerge.versionSelect "Choose the version of the item to use as the master item:">
<!ENTITY zotero.duplicatesMerge.versionSelect "Válassza ki azt az elemverziót, amit mester elemnek kíván használni: ">
<!ENTITY zotero.duplicatesMerge.fieldSelect "Select fields to keep from other versions of the item:">
<!ENTITY zotero.toolbar.newItem.label "Új elem">
@ -141,11 +141,11 @@
<!ENTITY zotero.tagSelector.selectVisible "Látható címkék kiválasztása">
<!ENTITY zotero.tagSelector.clearVisible "Látható címkék kiválasztásának megszüntetése">
<!ENTITY zotero.tagSelector.clearAll "Összes címke kiválasztásának megszüntetése">
<!ENTITY zotero.tagSelector.assignColor "Assign Color…">
<!ENTITY zotero.tagSelector.assignColor "Szín kiválasztása…">
<!ENTITY zotero.tagSelector.renameTag "Címke átnevezése...">
<!ENTITY zotero.tagSelector.deleteTag "Címke törlése...">
<!ENTITY zotero.tagColorChooser.title "Choose a Tag Color and Position">
<!ENTITY zotero.tagColorChooser.title "Válassza ki a címke színét és a pozíciót.">
<!ENTITY zotero.tagColorChooser.color "Szín:">
<!ENTITY zotero.tagColorChooser.position "Helyzet:">
<!ENTITY zotero.tagColorChooser.setColor "Szín beállítása">
@ -161,9 +161,9 @@
<!ENTITY zotero.bibliography.title "Bibliográfia létrehozása">
<!ENTITY zotero.bibliography.style.label "Hivatkozási stílus:">
<!ENTITY zotero.bibliography.outputMode "Output Mode:">
<!ENTITY zotero.bibliography.bibliography "Bibliography">
<!ENTITY zotero.bibliography.outputMethod "Output Method:">
<!ENTITY zotero.bibliography.outputMode "Kimeneti mód:">
<!ENTITY zotero.bibliography.bibliography "Bibliográfia">
<!ENTITY zotero.bibliography.outputMethod "Kimeneti metódus:">
<!ENTITY zotero.bibliography.saveAsRTF.label "Mentés RTF-ként">
<!ENTITY zotero.bibliography.saveAsHTML.label "Mentés HTML-ként">
<!ENTITY zotero.bibliography.copyToClipboard.label "Másolás a vágólapra">
@ -217,7 +217,7 @@
<!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.label "Automatically abbreviate journal titles">
<!ENTITY zotero.integration.prefs.automaticJournalAbbeviations.caption "MEDLINE journal abbreviations will be automatically generated using journal titles. The “Journal Abbr” field will be ignored.">
<!ENTITY zotero.integration.prefs.storeReferences.label "Store references in document">
<!ENTITY zotero.integration.prefs.storeReferences.label "A dokumentum tárolt hivatkozásai">
<!ENTITY zotero.integration.prefs.storeReferences.caption "Storing references in your document slightly increases file size, but will allow you to share your document with others without using a Zotero group. Zotero 3.0 or later is required to update documents created with this option.">
<!ENTITY zotero.integration.showEditor.label "Editor megjelenítése">
@ -246,7 +246,7 @@
<!ENTITY zotero.merge.deleted "Deleted">
<!ENTITY zotero.proxy.recognized.title "Proxy felismerve">
<!ENTITY zotero.proxy.recognized.warning "Only add proxies linked from your library, school, or corporate website">
<!ENTITY zotero.proxy.recognized.warning "Csak a könyvtárból, iskolából vagy vállalati weboldalról linkelt proxy-t adható hozzá">
<!ENTITY zotero.proxy.recognized.warning.secondary "Adding other proxies allows malicious sites to masquerade as sites you trust.">
<!ENTITY zotero.proxy.recognized.disable.label "Ne irányítsa át automatikusan a kéréseket az előzőleg felismert proxyikra.">
<!ENTITY zotero.proxy.recognized.ignore.label "Elutasít">
@ -274,7 +274,7 @@
<!ENTITY zotero.rtfScan.formatPage.label "Hivatkozás formázása">
<!ENTITY zotero.rtfScan.formatPage.description "A Zotero feldolgozza és formázza az RTF fájlt. Kérem várjon.">
<!ENTITY zotero.rtfScan.completePage.label "Az RTF átvizsgálása befejeződött">
<!ENTITY zotero.rtfScan.completePage.description "Your document has now been scanned and processed. Please ensure that it is formatted correctly.">
<!ENTITY zotero.rtfScan.completePage.description "A dokumentum átvizsgálása és feldolgozása megtörtént. Győződjön meg róla, hogy megfelelően van formázva.">
<!ENTITY zotero.rtfScan.inputFile.label "Bemeneti fájl">
<!ENTITY zotero.rtfScan.outputFile.label "Kimeneti fájl">
@ -282,5 +282,11 @@
<!ENTITY zotero.file.noneSelected.label "Nincs fájl kiválasztva">
<!ENTITY zotero.downloadManager.label "Mentés Zotero-ba">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Attachments cannot be saved to the currently selected library. This item will be saved to your library instead.">
<!ENTITY zotero.downloadManager.noPDFTools.description "To use this feature, you must first install the PDF tools in the Search pane of the Zotero preferences.">
<!ENTITY zotero.downloadManager.saveToLibrary.description "A csatolmányok nem menthetőek a jelenleg kiválasztott könyvtárba. Ez az elem a saját könyvtárába lesz mentve.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Ahhoz, hogy ezt a tulajdonságot használja, először telepítenie kell a PDF tools-t a Zotero beállítások keresőpaneljén.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Cím:">

View file

@ -17,7 +17,7 @@ general.errorHasOccurred=Hiba lépett fel.
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=The server returned an error. Please try again.
general.serverError=A szerver hibába fordult. Kérem próbálja újra.
general.restartFirefox=Indítsa újra a Firefoxot.
general.restartFirefoxAndTryAgain=Indítsa újra a Firefoxot és próbálja meg újra.
general.checkForUpdate=Frissítések keresése
@ -40,7 +40,7 @@ general.character.singular=karakter
general.character.plural=karakter
general.create=Új
general.delete=Törlés
general.moreInformation=More Information
general.moreInformation=További információ
general.seeForMoreInformation=A %S bővebb információkat tartalmaz.
general.enable=Bekapcsolás
general.disable=Kikapcsolás
@ -83,13 +83,13 @@ errorReport.reportErrors=Hibák jelentése...
errorReport.reportInstructions=A hiba jelentéséhez válassza a Műveletek menü "%S" menüpontját.
errorReport.followingReportWillBeSubmitted=A következő jelentés kerül elküldésre:
errorReport.noErrorsLogged=A %S indítása óta nem jelentkeztek hibák.
errorReport.advanceMessage=Press %S to send the report to the Zotero developers.
errorReport.advanceMessage=Nyomja meg a %S gombot, hogy elküldje a jelentést a Zotero fejlesztőinek.
errorReport.stepsToReproduce=Hiba reprodukálásához szükséges lépések:
errorReport.expectedResult=Elvárt működés:
errorReport.actualResult=Tényleges működés:
errorReport.noNetworkConnection=Nincs hálózati kapcsolat
errorReport.invalidResponseRepository=Invalid response from repository
errorReport.repoCannotBeContacted=Repository cannot be contacted
errorReport.invalidResponseRepository=Érvénytelen válasz a tárolótól
errorReport.repoCannotBeContacted=Nem lehet kapcsolatba lépni a tárolóval
attachmentBasePath.selectDir=Choose Base Directory
@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Elemek listájának betöltése...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Link csatolása az URI-hez
pane.items.attach.link.uri=Adja meg az URI-t:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Áthelyezés a Kukába
pane.items.trash=A Kukába helyezés megerősítése?
pane.items.trash.multiple=A Kukába helyezés megerősítése?
@ -473,8 +473,8 @@ fileTypes.document=Dokumentum
save.attachment=Pillanatfelvétel mentése...
save.link=Hivatkozás mentése...
save.link.error=Hiba történt a link mentésekor.
save.error.cannotMakeChangesToCollection=You cannot make changes to the currently selected collection.
save.error.cannotAddFilesToCollection=You cannot add files to the currently selected collection.
save.error.cannotMakeChangesToCollection=Nem módosíthatja a jelenleg kiválasztott gyűjteményt.
save.error.cannotAddFilesToCollection=Nem adhat hozzá fájlokat a jelenleg kiválasztott gyűjteményhez.
ingester.saveToZotero=Mentés a Zoteroba
ingester.saveToZoteroUsing=Mentés Zotero-ba "%S" használatával
@ -506,12 +506,12 @@ db.dbRestoreFailed=A Zotero adatbázis hibás, és az adatok automatikus vissza
db.integrityCheck.passed=Nincsenek hibák az adatbázisban.
db.integrityCheck.failed=Hibák a Zotero adatbázisban!
db.integrityCheck.dbRepairTool=Használhatja az adatbázsi-helyerállító eszközt a következő oldalon https://www.zotero.org/utils/dbfix/ hogy megkísérelje kijavítani a hibákat.
db.integrityCheck.repairAttempt=Zotero can attempt to correct these errors.
db.integrityCheck.appRestartNeeded=%S will need to be restarted.
db.integrityCheck.repairAttempt=A Zotero megpróbálhatja kijavítani ezeket a hibákat
db.integrityCheck.appRestartNeeded=%S-t újra kell indítani.
db.integrityCheck.fixAndRestart=Hibák javítása és újraindítás %S
db.integrityCheck.errorsFixed=The errors in your Zotero database have been corrected.
db.integrityCheck.errorsNotFixed=Zotero was unable to correct all the errors in your database.
db.integrityCheck.reportInForums=You can report this problem in the Zotero Forums.
db.integrityCheck.errorsFixed=Az ön Zotero adatbázisának hibái javításra kerültek
db.integrityCheck.errorsNotFixed=A Zotero nem tudta kijavítani az összes hibát az ön adatbázisában.
db.integrityCheck.reportInForums=Bejelentheti a problémát a Zotero Fórumain.
zotero.preferences.update.updated=Frissítve
zotero.preferences.update.upToDate=Nincs frissítés
@ -569,8 +569,8 @@ zotero.preferences.advanced.resetTranslators.changesLost=Az új vagy módosítot
zotero.preferences.advanced.resetStyles=Stílusok visszaállítása
zotero.preferences.advanced.resetStyles.changesLost=Az új vagy módosított stílusok elvesznek.
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.title=A hibakeresés eredménye elküldve
zotero.preferences.advanced.debug.sent=A hibakeresés eredménye elküldve a Zotero szervernek\n\nA hibaazonosító D%S.
zotero.preferences.advanced.debug.error=An error occurred sending debug output.
dragAndDrop.existingFiles=Az alábbi fájlok már léteznek a célmappában, ezért nem kerültek bemásolásra.
@ -582,7 +582,7 @@ fileInterface.import=Importálás
fileInterface.export=Exportálás
fileInterface.exportedItems=Exportált elemek
fileInterface.imported=Importálva
fileInterface.unsupportedFormat=The selected file is not in a supported format.
fileInterface.unsupportedFormat=A kiválasztott fájl formátuma nem támogatott.
fileInterface.viewSupportedFormats=Támogatott formátumok megtekintése…
fileInterface.untitledBibliography=Cím nélküli bibliográfia
fileInterface.bibliographyHTMLTitle=Bibliográfia
@ -725,7 +725,7 @@ integration.upgradeWarning=Your document must be permanently upgraded in order t
integration.error.newerDocumentVersion=Your document was created with a newer version of Zotero (%1$S) than the currently installed version (%1$S). Please upgrade Zotero before editing this document.
integration.corruptField=The Zotero field code corresponding to this citation, which tells Zotero which item in your library this citation represents, has been corrupted. Would you like to reselect the item?
integration.corruptField.description=Clicking "No" will delete the field codes for citations containing this item, preserving the citation text but potentially deleting it from your bibliography.
integration.corruptBibliography=The Zotero field code for your bibliography is corrupted. Should Zotero clear this field code and generate a new bibliography?
integration.corruptBibliography=A bibliográfiájának Zotero mezőkódja hibás. Szeretné ha a Zotero javítaná a mezőkódot és generálna egy új bibliográfiát?
integration.corruptBibliography.description=All items cited in the text will appear in the new bibliography, but modifications you made in the "Edit Bibliography" dialog will be lost.
integration.citationChanged=Módosította ezt a hivatkozást, amióta a Zotero generálta. Megtartja a módosításokat és megakadályozza a jövőbeli frissítésüket?
integration.citationChanged.description=Kattintson az „Igen” gombra, ha nem akarja, hogy a Zotero frissítse ezt a hivatkozást további hivatkozások hozzáadásakor, stílusváltáskor, vagy az elem módosításakor. Ha a „Nem”-re kattint elvesznek a módosításai.

View file

@ -284,3 +284,9 @@
<!ENTITY zotero.downloadManager.label "Simpan ke Zotero">
<!ENTITY zotero.downloadManager.saveToLibrary.description "Lampiran tidak dapat disimpan ke dalam perpustakaan yang saat ini terpilih. Sebaliknya, item ini akan disimpan ke dalam perpustakaan Anda.">
<!ENTITY zotero.downloadManager.noPDFTools.description "Untuk menggunakan fitur ini, Anda harus menginstal aplikasi PDF dalam preferensi Zotero terlebih dahulu.">
<!ENTITY zotero.attachLink.title "Attach Link to URI">
<!ENTITY zotero.attachLink.label.link "Link:">
<!ENTITY zotero.attachLink.label.title "Title:">

View file

@ -195,8 +195,8 @@ tagColorChooser.maxTags=Up to %S tags in each library can have colors assigned.
pane.items.loading=Memuat daftar item...
pane.items.columnChooser.moreColumns=More Columns
pane.items.columnChooser.secondarySort=Secondary Sort (%S)
pane.items.attach.link.uri.title=Attach Link to URI
pane.items.attach.link.uri=Enter a URI:
pane.items.attach.link.uri.unrecognized=Zotero did not recognize the URI you entered. Please check the address and try again.
pane.items.attach.link.uri.file=To attach a link to a file, please use “%S”.
pane.items.trash.title=Pindahkan ke Keranjang Sampah
pane.items.trash=Apakah Anda yakin ingin memindahkan item terpilih ke Keranjang Sampah?
pane.items.trash.multiple=Apakah Anda yakin ingin memindahkan item-item terpilih ke Keranjang Sampah?

View file

@ -54,9 +54,9 @@
<!ENTITY zotero.preferences.sync.syncServer "Zotero samhæfingarþjónn">
<!ENTITY zotero.preferences.sync.createAccount "Nýr notandi">
<!ENTITY zotero.preferences.sync.lostPassword "Týnt lykilorð?">
<!ENTITY zotero.preferences.sync.syncAutomatically "Sjamhæfa sjálfkrafa">
<!ENTITY zotero.preferences.sync.syncFullTextContent "Sync full-text content">
<!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero can sync the full-text content of files in your Zotero libraries with zotero.org and other linked devices, allowing you to easily search for your files wherever you are. The full-text content of your files will not be shared publicly.">
<!ENTITY zotero.preferences.sync.syncAutomatically "Samhæfa sjálfkrafa">
<!ENTITY zotero.preferences.sync.syncFullTextContent "Samhæfa innihald skjala">
<!ENTITY zotero.preferences.sync.syncFullTextContent.desc "Zotero getur samhæft innihald skjala í Zotero safninu þínu við zotero.org og önnur nettengd tæki sem gerir þér kleift að leita að þínum skjölum hvar sem þú ert. Innihaldi skjalanna er ekki deilt með öðrum.">
<!ENTITY zotero.preferences.sync.about "Um samhæfingu">
<!ENTITY zotero.preferences.sync.fileSyncing "Samhæfing skráa">
<!ENTITY zotero.preferences.sync.fileSyncing.url "slóð:">

View file

@ -1,6 +1,6 @@
<!ENTITY zotero.search.name "Nafn:">
<!ENTITY zotero.search.searchInLibrary "Search in library:">
<!ENTITY zotero.search.searchInLibrary "Leita í safni:">
<!ENTITY zotero.search.joinMode.prefix "Leita að">
<!ENTITY zotero.search.joinMode.any "einhverju">
@ -14,7 +14,7 @@
<!ENTITY zotero.search.textModes.phrase "Setningaliður">
<!ENTITY zotero.search.textModes.phraseBinary "Setningaliður (með stafrænum skrám)">
<!ENTITY zotero.search.textModes.regexp "Regexp">
<!ENTITY zotero.search.textModes.regexpCS "Regexp (case-sensitive)">
<!ENTITY zotero.search.textModes.regexpCS "Leitartexti (næmur fyrir há- og lágstöfum)">
<!ENTITY zotero.search.date.units.days "dagar">
<!ENTITY zotero.search.date.units.months "mánuðir">

Some files were not shown because too many files have changed in this diff Show more