Commit ddfb3c58 authored by CardBook's avatar CardBook

version 26.1

parent 96702283
......@@ -13,6 +13,7 @@ locale cardbook hr chrome/locale/hr/
locale cardbook hu chrome/locale/hu/
locale cardbook id chrome/locale/id/
locale cardbook it chrome/locale/it/
locale cardbook ko chrome/locale/ko/
locale cardbook lt chrome/locale/lt/
locale cardbook nl chrome/locale/nl/
locale cardbook pl chrome/locale/pl/
......
......@@ -899,7 +899,7 @@ if ("undefined" == typeof(wdw_addressbooksAdd)) {
myFile.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
}
var myMode = "WINDOW";
cardbookSynchronization.loadFile(myFile, "", wdw_addressbooksAdd.gFinishParams[i].dirPrefId, myMode, "");
cardbookSynchronization.loadFile(myFile, wdw_addressbooksAdd.gFinishParams[i].dirPrefId, myMode, "");
cardbookSynchronization.waitForDirFinished(wdw_addressbooksAdd.gFinishParams[i].dirPrefId, wdw_addressbooksAdd.gFinishParams[i].name, myMode);
}
} else if (wdw_addressbooksAdd.gType === "DIRECTORY") {
......@@ -945,7 +945,7 @@ if ("undefined" == typeof(wdw_addressbooksAdd)) {
cardbookSynchronization.initMultipleOperations(wdw_addressbooksAdd.gFinishParams[i].dirPrefId);
cardbookRepository.cardbookDirRequest[wdw_addressbooksAdd.gFinishParams[i].dirPrefId]++;
var myMode = "WINDOW";
cardbookSynchronization.loadDir(myDir, "", wdw_addressbooksAdd.gFinishParams[i].dirPrefId, myMode, "");
cardbookSynchronization.loadDir(myDir, wdw_addressbooksAdd.gFinishParams[i].dirPrefId, myMode, "");
cardbookSynchronization.waitForDirFinished(wdw_addressbooksAdd.gFinishParams[i].dirPrefId, wdw_addressbooksAdd.gFinishParams[i].name, myMode);
}
}
......
......@@ -34,7 +34,7 @@ if ("undefined" == typeof(wdw_addressbooksEdit)) {
},
resetFnFormula: function () {
document.getElementById('fnFormulaTextBox').value = cardbookPreferences.getFnFormula(window.arguments[0].dirPrefId);
document.getElementById('fnFormulaTextBox').value = cardbookRepository.defaultFnFormula;
},
showAutoSyncInterval: function () {
......
......@@ -62,7 +62,7 @@ if ("undefined" == typeof(ovl_attachments)) {
OnStopRunningUrl: function (aUrl, aStatus) {
if (aStatus == 0) {
wdw_cardbooklog.updateStatusProgressInformationWithDebug2("debug mode : attachment successfully downloaded");
cardbookSynchronization.loadFile(this.mFile, this.myDirPrefId, "", "WINDOW", "");
cardbookSynchronization.loadFile(this.mFile, this.myDirPrefId, "WINDOW", "");
} else {
wdw_cardbooklog.updateStatusProgressInformationWithDebug2("debug mode : attachment not successfully downloaded, status : " + aStatus);
}
......
......@@ -113,7 +113,7 @@ if ("undefined" == typeof(cardbookBirthdaysUtils)) {
var lBirthdayId = cardbookUtils.getUUID();
var leventEntryTitle = cardbookPreferences.getStringPref("extensions.cardbook.eventEntryTitle");
var lBirthdayTitle = leventEntryTitle.replace("%1$S", lBirthdayName).replace("%2$S",lBirthdayAge);
var lBirthdayTitle = leventEntryTitle.replace("%1$S", lBirthdayName).replace("%2$S",lBirthdayAge).replace("%S", lBirthdayName).replace("%S",lBirthdayAge);
// prepare Listener
var getListener = {
......
......@@ -202,8 +202,8 @@ if ("undefined" == typeof(cardbookCardParser)) {
// Splitting data
if (localDelim1 >= 0) {
vCardDataArrayHeader = vCardDataArray[vCardDataArrayIndex].substr(0,localDelim1);
vCardDataArrayTrailer = vCardDataArray[vCardDataArrayIndex].substr(localDelim1+1,vCardDataArray[vCardDataArrayIndex].length);
vCardDataArrayHeader = vCardDataArray[vCardDataArrayIndex].substr(0,localDelim1).trim();
vCardDataArrayTrailer = vCardDataArray[vCardDataArrayIndex].substr(localDelim1+1,vCardDataArray[vCardDataArrayIndex].length).trim();
// for Google
vCardDataArrayTrailer = vCardDataArrayTrailer.replace(/\\:/g, ":");
localDelim2 = vCardDataArrayHeader.indexOf(";",0);
......
if ("undefined" == typeof(cardbookCountries)) {
Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/NetUtil.jsm");
Components.utils.import("chrome://cardbook/content/cardbookRepository.js");
var cardbookCountries = {
fetchJSON: function (aURL) {
return new Promise((resolve, reject) => {
var myUri = Services.io.newURI(aURL, null, null);
var channel = Services.io.newChannelFromURI2(myUri,
null,
Services.scriptSecurityManager.getSystemPrincipal(),
null,
Components.interfaces.nsILoadInfo.SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS,
Components.interfaces.nsIContentPolicy.TYPE_OTHER);
NetUtil.asyncFetch(channel, (inputStream, status) => {
if (!Components.isSuccessCode(status)) {
reject(status);
return;
}
try {
var countries = NetUtil.readInputStreamToString(inputStream, inputStream.available());
resolve(countries);
} catch (e) {
reject(e);
}
});
});
},
loadData: function () {
cardbookCountries.fetchJSON("resource://cardbook-data/countries.csv").then((countries) => {
var re = /[\n\u0085\u2028\u2029]|\r\n?/;
var myCountryArray = countries.split(re);
var myCountryLangArray = myCountryArray[0].split(',');
for (var i = 2; i < myCountryLangArray.length; i++) {
var myLangCode = myCountryLangArray[i];
cardbookRepository.countries[myLangCode] = {};
}
for (var i = 1; i < myCountryArray.length; i++) {
var myCountryTranslationArray = myCountryArray[i].split(',');
var myCountryCode = myCountryTranslationArray[0];
cardbookRepository.phones[myCountryTranslationArray[0]] = myCountryTranslationArray[1];
for (var j = 2; j < myCountryLangArray.length; j++) {
cardbookRepository.countries[myCountryLangArray[j]][myCountryCode] = myCountryTranslationArray[j];
}
}
}).then(() => {
wdw_cardbooklog.updateStatusProgressInformation("cardbookRepository.countries and cardbookRepository.phones load OK");
}, (error) => {
wdw_cardbooklog.updateStatusProgressInformation("cardbookCountries error : " + error, "Error");
});
}
};
var loader = Services.scriptloader;
loader.loadSubScript("chrome://cardbook/content/wdw_log.js");
};
......@@ -1064,12 +1064,8 @@ if ("undefined" == typeof(cardbookSynchronization)) {
cardbookRepository.cardbookServerSyncLoadCacheDone[aParams.aPrefId]++;
},
loadDir: function (aDir, aTarget, aDirPrefId, aMode, aSource) {
if (aTarget == "") {
var myDirPrefId = aDirPrefId;
} else {
var myDirPrefId = cardbookUtils.getAccountId(aTarget);
}
loadDir: function (aDir, aTarget, aMode, aSource) {
var myDirPrefId = cardbookUtils.getAccountId(aTarget);
var aListOfFileName = [];
aListOfFileName = cardbookSynchronization.getFilesFromDir(aDir.path);
for (var i = 0; i < aListOfFileName.length; i++) {
......@@ -1078,7 +1074,7 @@ if ("undefined" == typeof(cardbookSynchronization)) {
myFile.append(aListOfFileName[i]);
if (myFile.exists() && myFile.isFile()) {
cardbookRepository.cardbookFileRequest[myDirPrefId]++;
cardbookSynchronization.loadFile(myFile, aTarget, aDirPrefId, aMode, aSource);
cardbookSynchronization.loadFile(myFile, aTarget, aMode, aSource);
}
}
cardbookRepository.cardbookDirResponse[myDirPrefId]++;
......@@ -1849,8 +1845,8 @@ if ("undefined" == typeof(cardbookSynchronization)) {
onDAVQueryComplete: function(status, response, askCertificate) {
if (status > 199 && status < 400) {
try {
cardbookUtils.formatStringForOutput("googleAccessTokenOK", [aConnection.connDescription, response]);
var responseText = JSON.parse(response);
cardbookUtils.formatStringForOutput("googleAccessTokenOK", [aConnection.connDescription, cardbookUtils.cleanWebObject(responseText)]);
aConnection.accessToken = responseText.token_type + " " + responseText.access_token;
aConnection.connUrl = cardbookSynchronization.getWellKnownUrl(cardbookRepository.cardbookgdata.GOOGLE_API);
cardbookSynchronization.discoverPhase1(aConnection, aOperationType, aParams);
......@@ -1888,9 +1884,10 @@ if ("undefined" == typeof(cardbookSynchronization)) {
onDAVQueryComplete: function(status, response, askCertificate) {
if (status > 199 && status < 400) {
try {
cardbookUtils.formatStringForOutput("googleRefreshTokenOK", [aConnection.connDescription, response]);
var responseText = JSON.parse(response);
cardbookUtils.formatStringForOutput("googleRefreshTokenOK", [aConnection.connDescription, cardbookUtils.cleanWebObject(responseText)]);
if (aCallback) {
aCallback(JSON.parse(response));
aCallback(responseText);
}
}
catch(e) {
......@@ -2313,35 +2310,31 @@ if ("undefined" == typeof(cardbookSynchronization)) {
cardbookRepository.cardbookFileRequest[aDirPrefId]++;
var myFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
myFile.initWithPath(myPrefUrl);
cardbookSynchronization.loadFile(myFile, "", aDirPrefId, aMode, "");
cardbookSynchronization.loadFile(myFile, aDirPrefId, aMode, "");
cardbookSynchronization.waitForDirFinished(aDirPrefId, myPrefName, aMode);
} else if (myPrefType === "DIRECTORY") {
cardbookRepository.cardbookDirRequest[aDirPrefId]++;
var myDir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
myDir.initWithPath(myPrefUrl);
cardbookSynchronization.loadDir(myDir, "", aDirPrefId, aMode, "");
cardbookSynchronization.loadDir(myDir, aDirPrefId, aMode, "");
cardbookSynchronization.waitForDirFinished(aDirPrefId, myPrefName, aMode);
} else if (myPrefType === "CACHE") {
cardbookRepository.cardbookDirRequest[aDirPrefId]++;
var myDir = cardbookRepository.getLocalDirectory();
myDir.append("Collected");
cardbookSynchronization.loadDir(myDir, "", aDirPrefId, aMode, "");
cardbookSynchronization.loadDir(myDir, aDirPrefId, aMode, "");
cardbookSynchronization.waitForDirFinished(aDirPrefId, myPrefName, aMode);
}
}
},
loadFile: function (aFile, aTarget, aFileId, aMode, aSource) {
if (aTarget == "") {
var myDirPrefId = aFileId;
} else {
var myDirPrefId = cardbookUtils.getAccountId(aTarget);
}
loadFile: function (aFile, aTarget, aMode, aSource) {
var myDirPrefId = cardbookUtils.getAccountId(aTarget);
var params = {};
params["showError"] = true;
params["aFile"] = aFile;
params["aTarget"] = aTarget;
params["aFileId"] = aFileId;
params["aMode"] = aMode;
params["aPrefId"] = myDirPrefId;
params["aPrefIdType"] = cardbookPreferences.getType(myDirPrefId);
......@@ -2371,7 +2364,7 @@ if ("undefined" == typeof(cardbookSynchronization)) {
} else if (fileContentArray[i] == "END:VCARD") {
cardContent = cardContent + "\r\n" + fileContentArray[i];
try {
var myCard = new cardbookCardParser(cardContent, "", "", aParams.aFileId);
var myCard = new cardbookCardParser(cardContent, "", "", aParams.aPrefId);
}
catch (e) {
cardbookRepository.cardbookServerSyncError[aParams.aPrefId]++;
......@@ -2427,10 +2420,6 @@ if ("undefined" == typeof(cardbookSynchronization)) {
}
}
} else {
if (aParams.aFileId != null && aParams.aFileId !== undefined && aParams.aFileId != "") {
cardbookRepository.cardbookAccountsCategories[aParams.aFileId]=[];
cardbookRepository.cardbookDisplayCards[aParams.aFileId]=[];
}
cardbookUtils.formatStringForOutput("fileEmpty", [aParams.aFile.path]);
}
cardbookRepository.cardbookFileResponse[aParams.aPrefId]++;
......
......@@ -1224,7 +1224,7 @@ if ("undefined" == typeof(cardbookUtils)) {
},
setCardValueByField: function(aCard, aField, aValue) {
aValue = aValue.replace(/^\"|\"$/g, "");
aValue = aValue.replace(/^\"|\"$/g, "").trim();
if (aValue == "") {
return;
} else if (aField == "blank") {
......@@ -1245,7 +1245,7 @@ if ("undefined" == typeof(cardbookUtils)) {
}
}
if (!found) {
if (myType == "notype") {
if (myType == "notype" || myType == "all") {
var myType2 = "";
} else {
var myType2 = "type=" + myType;
......@@ -1256,7 +1256,7 @@ if ("undefined" == typeof(cardbookUtils)) {
} else if (myField == "categories") {
aCard[myField] = cardbookUtils.unescapeArray(cardbookUtils.escapeString(aValue).split(","));
} else {
if (myType == "notype") {
if (myType == "notype" || myType == "all") {
var myType2 = "";
} else {
var myType2 = "type=" + myType;
......@@ -2705,6 +2705,30 @@ if ("undefined" == typeof(cardbookUtils)) {
}
},
cleanWebArray: function (aArray) {
var cleanArrayArray = [];
for (var i = 0; i < aArray.length; i++) {
if (aArray[i].startsWith("refresh_token=")) {
cleanArrayArray.push("refresh_token=*****");
} else {
cleanArrayArray.push(aArray[i]);
}
}
return cleanArrayArray.join('&');
},
cleanWebObject: function (aObject) {
var cleanObjectArray = [];
for (var key in aObject) {
if (key == "Authorization" || key == "access_token") {
cleanObjectArray.push(key + ': "*****"');
} else {
cleanObjectArray.push(key + ': "' + aObject[key] + '"');
}
}
return cleanObjectArray.join(', ');
},
formatStringForOutput: function(aStringCode, aValuesArray, aErrorCode) {
var strBundle = Services.strings.createBundle("chrome://cardbook/locale/cardbook.properties");
if (aValuesArray) {
......
......@@ -66,6 +66,7 @@ if ("undefined" == typeof(cardbookWebDAV)) {
this.accessToken = connection.accessToken;
this.reportLength = 0;
this.askCertificate = false;
this.hideResponse = false;
}
cardbookWebDAV.prototype = {
......@@ -254,7 +255,7 @@ if ("undefined" == typeof(cardbookWebDAV)) {
}
},
_sendHTTPRequest: function(method, body, headers, aOverrideMime) {
_sendHTTPRequest: function(method, body, headers, aOverrideMime, aCleanBody) {
try {
let httpChannel = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
httpChannel.loadFlags |= Components.interfaces.nsIRequest.LOAD_ANONYMOUS | Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE | Components.interfaces.nsIRequest.INHIBIT_PERSISTENT_CACHING;
......@@ -290,10 +291,14 @@ if ("undefined" == typeof(cardbookWebDAV)) {
};
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : method : ", method);
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : body : ", body);
if (headers) {
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : headers : ", headers.toSource());
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : headers : ", cardbookUtils.cleanWebObject(headers));
}
if (aCleanBody) {
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : body : ", aCleanBody);
} else {
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : body : ", body);
}
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : username : ", this.username);
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : url : ", this.url);
......@@ -329,9 +334,11 @@ if ("undefined" == typeof(cardbookWebDAV)) {
var status = aStatus;
var headers = {};
var response = null;
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : response text : ", aResult);
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : response code : ", aStatus);
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : response etag : ", aChannel.getResponseHeader("etag"));
if (!this.hideResponse) {
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : response text : ", aResult);
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : response code : ", aStatus);
wdw_cardbooklog.updateStatusProgressInformationWithDebug1(this.logDescription + " : debug mode : response etag : ", aChannel.getResponseHeader("etag"));
}
if (status !== 499 && status !== 0 && status !== 408) {
if (aResultLength > 0) {
var responseText = aResult;
......@@ -384,7 +391,7 @@ if ("undefined" == typeof(cardbookWebDAV)) {
let query = this._reportQuery(parameters.props);
this._sendHTTPRequest(operation, query, headers);
} else if (operation == "DELETE") {
this._sendHTTPRequest(operation, parameters, {});
this._sendHTTPRequest(operation, null, {});
}
},
......@@ -415,17 +422,12 @@ if ("undefined" == typeof(cardbookWebDAV)) {
},
googleToken: function(aType, aParams, aHeaders) {
var paramsString = "";
this.hideResponse = true;
var paramsArray = [];
for (var param in aParams) {
if (!(paramsString != null && paramsString !== undefined && paramsString != "")) {
paramsString = param + "=" + encodeURIComponent(aParams[param]);
} else {
paramsString = paramsString + "&" + param + "=" + encodeURIComponent(aParams[param]);
}
paramsArray.push(param + "=" + encodeURIComponent(aParams[param]));
}
var body = paramsString;
this._sendHTTPRequest(aType, body, aHeaders);
this._sendHTTPRequest(aType, paramsArray.join("&"), aHeaders, null, cardbookUtils.cleanWebArray(paramsArray));
},
delete: function() {
......@@ -496,4 +498,5 @@ if ("undefined" == typeof(cardbookWebDAV)) {
var loader = Services.scriptloader;
loader.loadSubScript("chrome://cardbook/content/cardbookPasswordManager.js");
loader.loadSubScript("chrome://cardbook/content/preferences/cardbookPreferences.js");
loader.loadSubScript("chrome://cardbook/content/cardbookUtils.js");
};
......@@ -90,7 +90,7 @@ if ("undefined" == typeof(ovl_synchro)) {
prefs.setCharPref("accountsShown", "all");
prefs.setCharPref("uncategorizedCards", "");
prefs.setCharPref("addonVersion", "26.0");
prefs.setCharPref("addonVersion", "26.1");
},
lEventTimerSync : { notify: function(lTimerSync) {
......
......@@ -50,10 +50,12 @@ if ("undefined" == typeof(wdw_cardbook)) {
setToolbarCustom: function () {
var toolbox = document.getElementById("cardbook-toolbox");
toolbox.customizeDone = function(aEvent) {
MailToolboxCustomizeDone(aEvent, "CustomizeCardBookToolbar");
};
toolbox.setAttribute('toolbarHighlight','true');
if (toolbox) {
toolbox.customizeDone = function(aEvent) {
MailToolboxCustomizeDone(aEvent, "CustomizeCardBookToolbar");
};
toolbox.setAttribute('toolbarHighlight','true');
}
},
showCorrectTabs: function () {
......@@ -743,7 +745,7 @@ if ("undefined" == typeof(wdw_cardbook)) {
if (cardbookUtils.getFileNameExtension(aFile.leafName).toLowerCase() == "csv") {
cardbookSynchronization.loadCSVFile(aFile, myTarget, "WINDOW", "cardbook.cardImportedFromFile");
} else {
cardbookSynchronization.loadFile(aFile, myTarget, "", "WINDOW", "cardbook.cardImportedFromFile");
cardbookSynchronization.loadFile(aFile, myTarget, "WINDOW", "cardbook.cardImportedFromFile");
}
cardbookSynchronization.waitForImportFinished(myDirPrefId, myDirPrefIdName);
}
......@@ -776,7 +778,7 @@ if ("undefined" == typeof(wdw_cardbook)) {
}
cardbookSynchronization.initMultipleOperations(myDirPrefId);
cardbookRepository.cardbookDirRequest[myDirPrefId]++;
cardbookSynchronization.loadDir(aDirectory, myTarget, "", "WINDOW", "cardbook.cardImportedFromFile");
cardbookSynchronization.loadDir(aDirectory, myTarget, "WINDOW", "cardbook.cardImportedFromFile");
cardbookSynchronization.waitForImportFinished(myDirPrefId, myDirPrefIdName);
}
catch (e) {
......
......@@ -437,4 +437,4 @@ wdw_passwordNewTitle=Editor URL
dateDisplayedFormatLong=Dlouhý: %1
dateDisplayedFormatShort=Krátký: %1
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{7}}|)
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{5}}\n|)({{7}}|)
......@@ -437,4 +437,4 @@ wdw_passwordNewTitle=URL-redigering
dateDisplayedFormatLong=Langt: %1
dateDisplayedFormatShort=Kort: %1
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{7}}|)
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{5}}\n|)({{7}}|)
......@@ -437,4 +437,4 @@ wdw_passwordNewTitle=URL Editor
dateDisplayedFormatLong=Lang: %1
dateDisplayedFormatShort=Kurz: %1
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{7}}|)
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{5}}\n|)({{7}}|)
......@@ -6,7 +6,7 @@
<!ENTITY emailColumnLabel "Email">
<!ENTITY sendEmailLabel "Write a new message">
<!ENTITY sendEmailAccesskey "E">
<!ENTITY syncLightningMenuItemLabel "Sync. with Lightning">
<!ENTITY syncLightningMenuItemLabel "Synchronize with Lightning">
<!ENTITY syncLightningMenuAccesskey "S">
<!ENTITY configurationButtonLabel "Configuration">
<!ENTITY configurationButtonAccesskey "o">
......@@ -180,7 +180,7 @@
<!ENTITY resetListLabel "Restore to Default">
<!ENTITY resetListAccesskey "R">
<!ENTITY syncGroupboxLabel "Sync.">
<!ENTITY syncGroupboxLabel "Synchronization">
<!ENTITY syncWarn "Synchronizing propagates your modifications to a remote server and the server's modifications to you.">
<!ENTITY initialSyncLabel "Run synchronization at Thunderbird startup">
<!ENTITY initialSyncAccesskey "R">
......@@ -251,7 +251,7 @@
<!ENTITY remindViaLightningGroupboxLabel "Remind via Thunderbird Lightning Calendar Extension">
<!ENTITY numberOfDaysForWritingLabel "Number of days to write anniversaries">
<!ENTITY numberOfDaysForWritingAccesskey "w">
<!ENTITY syncWithLightningOnStartupLabel "Sync with Lightning on startup">
<!ENTITY syncWithLightningOnStartupLabel "Synchronize with Lightning on startup">
<!ENTITY syncWithLightningOnStartupAccesskey "L">
<!ENTITY calendarEntryTitleLabel "Title for calendar event">
<!ENTITY calendarEntryTitleTooltip "Template title for the calendar event. It should contain two placeholders &#37;S, respectively replaced by name and age. If the field is empty, a standard message is used.">
......
......@@ -6,6 +6,6 @@
<!ENTITY flushLogEditionLabel "Clear List">
<!ENTITY flushLogEditionAccesskey "C">
<!ENTITY clipboardLogEditionLabel "Copy to Clipboard">
<!ENTITY clipboardLogEditionAccesskey "o">
<!ENTITY clipboardLogEditionAccesskey "p">
<!ENTITY cancelLogEditionLabel "OK">
<!ENTITY cancelLogEditionAccesskey "O">
......@@ -437,4 +437,4 @@ wdw_passwordNewTitle=Modification d'URL
dateDisplayedFormatLong=Long : %1
dateDisplayedFormatShort=Court : %1
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{7}}|)
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{5}}\n|)({{7}}|)
......@@ -251,7 +251,7 @@
<!ENTITY remindViaLightningGroupboxLabel "Rappel par l'extension de calendrier Lightning de Thunderbird">
<!ENTITY numberOfDaysForWritingLabel "Nombre de jours pour écrire les anniversaires">
<!ENTITY numberOfDaysForWritingAccesskey "o">
<!ENTITY syncWithLightningOnStartupLabel "Sync. avec Lightning au démarrage">
<!ENTITY syncWithLightningOnStartupLabel "Synchroniser avec Lightning au démarrage">
<!ENTITY syncWithLightningOnStartupAccesskey "S">
<!ENTITY calendarEntryTitleLabel "Titre pour les entrées du calendrier">
<!ENTITY calendarEntryTitleTooltip "Titre modèle pour les entrées du calendrier. Ce champ doit comporter deux &#37;S, remplacés respectivement par le nom et l'âge. Si le champ est vide alors un message standard est utilisé.">
......
......@@ -437,4 +437,4 @@ wdw_passwordNewTitle=Uređivač URL-a
dateDisplayedFormatLong=Dugi: %1
dateDisplayedFormatShort=Kratki: %1
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{7}}|)
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{5}}\n|)({{7}}|)
......@@ -180,7 +180,7 @@
<!ENTITY resetListLabel "Vrati na uobičajeno">
<!ENTITY resetListAccesskey "j">
<!ENTITY syncGroupboxLabel "Sync.">
<!ENTITY syncGroupboxLabel "Sinkronizirati">
<!ENTITY syncWarn "Sinhroniziranje raznosi vaše preinake udaljenom poslužitelju i poslužiteljeve preinake vama.">
<!ENTITY initialSyncLabel "Pokreni početnu sinhronizaciju kad počne Thunderbird">
<!ENTITY initialSyncAccesskey "R">
......
......@@ -437,4 +437,4 @@ wdw_passwordNewTitle=Webcím szerkesztő
dateDisplayedFormatLong=Hosszú: %1
dateDisplayedFormatShort=Rövid: %1
addressFormatFormula=({{3}}\n|)({{1}}\n|)({{6}} |)({{4}}|)(\n)({{7}}|)
addressFormatFormula=({{6}} |)({{4}}|)(\n)({{3}}\n|)({{7}}|)
This diff is collapsed.
<!ENTITY cardbookMenuItemLabel "연락처">
<!ENTITY cardbookMenuItemAccesskey "b">
<!ENTITY cardbookMenuItemKey "b">
<!ENTITY cardbookMenuItemTooltip "연락처 탭으로 전환하십시오">
<!ENTITY cardbookToolbarButtonLabel "연락처">
<!ENTITY cardbookToolbarButtonTooltip "연락처 탭으로 전환하십시오">
<!ENTITY cardbookTabButtonLabel "연락처">
<!ENTITY cardbookTabButtonTooltip "연락처 탭으로 전환하십시오">
<!ENTITY newCardBookCardMenuLabel "연락처…">
<!ENTITY newCardBookCardMenuAccesskey "C">
<!ENTITY newCardBookCardMenuKey "N">
<!ENTITY newCardBookSearchMenuLabel "연락처 검색…">
<!ENTITY newCardBookSearchMenuAccesskey "C">
<!ENTITY addToCardBookMenuLabel "주소록에 추가">
<!ENTITY addToCardBookMenuAccesskey "d">
<!ENTITY editInCardBookMenuLabel "연락처 편집">
<!ENTITY editInCardBookMenuAccesskey "E">
<!ENTITY deleteInCardBookMenuLabel "연락처 삭제">
<!ENTITY deleteInCardBookMenuAccesskey "D">
<!ENTITY IMPPMenuLabel "~에 연결하다">
<!ENTITY IMPPMenuAccesskey "o">
<!ENTITY findAllEmailsFromContactMessengerLabel "이 연락처와 관련된 이메일을 찾으십시오">
<!ENTITY findAllEmailsFromContactMessengerAccesskey "c">
<!ENTITY findEmailsFromEmailMessengerLabel "이 이메일 주소와 관련된 이메일을 찾으십시오">
<!ENTITY findEmailsFromEmailMessengerAccesskey "e">
<!ENTITY findAllEventsFromContactMessengerLabel "이 연락처와 관련된 캘린더 이벤트 찾기">
<!ENTITY findAllEventsFromContactMessengerAccesskey "c">
<!ENTITY findEventsFromEmailMessengerLabel "이 이메일 주소와 관련된 캘린더 일정 찾기">
<!ENTITY findEventsFromEmailMessengerAccesskey "e">
<!ENTITY mailContext-addToCardBookMenuLabel "주소록에 추가…">
<!ENTITY mailContext-addToCardBookMenuAccesskey "d">
<!ENTITY addAllAttachementsToCardBookMenuLabel "받는 연락처 사람 모두…">
<!ENTITY addAttachementToCardBookMenuLabel "받는 사람 연락처…">
<!ENTITY cardbookABPaneItemLabel "주소록 창">
<!ENTITY cardbookABPaneItemAccesskey "A">
<!ENTITY cardbookContactPaneItemLabel "연락처 창">
<!ENTITY cardbookContactPaneItemAccesskey "O">
<!ENTITY wizard.title "새 주소록 추가">
<!ENTITY wizard.label "새 주소록 추가">
<!ENTITY welcomePage.wizard.description "환영">
<!ENTITY welcomePage.description "처음으로 연락처를 사용하는 것 같아서 썬더 버드의 표준 주소록에서 연락처로 연락처를 가져 오려고합니다.">
<!ENTITY initialPage.wizard.description "새 주소록의 위치.">
<!ENTITY initialPage.description "주소록 위치:">
<!ENTITY initialPage.computer.label "로컬">
<!ENTITY initialPage.network.label "원격">
<!ENTITY initialPage.standard.label "썬더 버드의 표준 주소록 가져 오기">
<!ENTITY initialPage.search.label "기존 주소록 검색">
<!ENTITY localPage.wizard.description "새 로컬 주소록의 유형 및 위치">
<!ENTITY localPage.type.description "로컬 주소록 유형:">
<!ENTITY localPage.type.label "종류">
<!ENTITY localPage.createDB.label "새 주소록 만들기">
<!ENTITY localPage.createDirectory.label "새 주소록 만들기 (디렉토리)">
<!ENTITY localPage.createFile.label "새 주소록 만들기 (파일)">
<!ENTITY localPage.openDirectory.label "기존 주소록 열기 (디렉토리)">
<!ENTITY localPage.openFile.label "기존 주소록 열기 (파일)">
<!ENTITY localPage.uri.label "디렉토리 또는 파일">
<!ENTITY localPage.uri.description "브라우저를 사용하여 새 로컬 주소록의 위치를 선택하십시오. 새 파일을 작성하는 경우 .vcf를 파일 확장자로 지정하십시오.">
<!ENTITY localPage.uributton.label "찾아보기">
<!ENTITY remotePage.wizard.description "새 원격 주소록의 유형과 위치.">
<!ENTITY remotePage.description "원격 주소록의 유형은 무엇입니까? 주의 : 구글은 가상 카드 표준을 준수하지 않습니다.">
<!ENTITY remotePage.type.label "종류">
<!ENTITY remotePage.carddav.label "카드 분산 저작 및 버전 관리">
<!ENTITY remotePage.google.label "구글">
<!ENTITY remotePage.apple.label "사과">
<!ENTITY remotePage.connection.label "연결">
<!ENTITY remotePage.url.description "카드 암호 및 버전 관리 (CardDAV) 유형의 경우 원격 주소록의 URL을 입력하십시오. 부분 URL (예: http(s)://carddav.example.or.kr)을 사용해보십시오. 구글 주소록의 경우 이 입력란을 지정하지 마십시오.">
<!ENTITY remotePage.url.label "URL 주소">
<!ENTITY remotePage.credentials.description "주소록에 액세스하기위한 자격 증명을 입력하십시오. 구글 주소록의 경우, 사용자 이름은 귀하의 이메일이어야합니다.">
<!ENTITY remotePage.validatebutton.label "유효성을 검사하다">
<!ENTITY locationSearchPage.wizard.description "저장된 검색의 정의.">
<!ENTITY locationSearchPage.label "저장된 검색">
<!ENTITY googleOauthPage.wizard.description "구글 인증">
<!ENTITY namePage.wizard.description "주소록 속성">
<!ENTITY namePage.selected.label "선택됨">
<!ENTITY namePage.name.label "이름">
<!ENTITY namePage.color.label "색깔">
<!ENTITY namePage.urnuuid.label "urn:uuid 사용">
<!ENTITY namePage.readonly.label "읽기 전용 모드">
<!ENTITY namePage.vCardVersion.label "가상 카드">
<!ENTITY namesPage.wizard.description "주소록 속성">
<!ENTITY namesPage.name.label "이름">
<!ENTITY namesPage.name.description "여러 주소록이 발견되었습니다. 열려는 주소록과 이름을 선택하십시오:">
<!ENTITY finishPage.wizard.description "구성된 주소록">
<!ENTITY finishPage.description "새 주소록이 성공적으로 구성되었습니다.">
<!ENTITY finishsPage.wizard.description "구성된 주소록">
<!ENTITY finishsPage.description "새 주소록이 성공적으로 구성되었습니다.">
<!ENTITY wdw_addressbooksEditTitle "주소록 속성">
<!ENTITY colorLabel "색깔">
<!ENTITY colorAccesskey "C">
<!ENTITY nameLabel "이름">
<!ENTITY nameAccesskey "N">
<!ENTITY typeLabel "종류">
<!ENTITY urlLabel "URL 주소">
<!ENTITY readonlyLabel "읽기 전용 모드">
<!ENTITY readonlyAccesskey "R">
<!ENTITY vCardVersionLabel "가상 카드">
<!ENTITY dateFormatLabel "예상된 날짜 형식">
<!ENTITY dateFormatAccesskey "E">
<!ENTITY urnuuidLabel "urn:uuid 사용">
<!ENTITY urnuuidAccesskey "U">
<!ENTITY autoSyncGroupboxLabel "주기적 동기화">
<!ENTITY autoSyncLabel "주기적 동기화 사용">
<!ENTITY autoSyncAccesskey "E">
<!ENTITY autoSyncIntervalLabel "주기적 동기화 간격 (분)">
<!ENTITY autoSyncIntervalAccesskey "I">
<!ENTITY miscTabLabel "여러 가지 잡다한">
<!ENTITY fnLabelExplanation "연락처가 이름표시를생성하는 방식을 사용자 정의 할 수 있습니다. 이 수식은 『()』로 묶인 블록으로 구성됩니다. 이 블록에는 『|』로 구분 된 두 부분이 있습니다. 첫 번째 부분은 관련된 용어 (예: {{1}})가 null이 아닐 때 적용되며 두 번째 부분은 관련된 용어가 null 일 때 적용됩니다.">
<!ENTITY fnFormulaLabel "표시 이름 생성">
<!ENTITY fnFormulaAccesskey "y">
<!ENTITY resetFnFormulaLabel "초기 설정">
<!ENTITY resetFnFormulaAccesskey "R">
<!ENTITY wdw_adrEditionTitle "주소 편집기">
<!ENTITY adrPostOfficeLabel "포스트오피스박스">
<!ENTITY adrExtendedAddrLabel "아파트와 동 호수">
<!ENTITY adrStreetLabel "도로명">
<!ENTITY adrLocalityLabel "시/구">
<!ENTITY adrRegionLabel "시/도">
<!ENTITY adrPostalCodeLabel "우편 번호">
<!ENTITY adrCountryLabel "국가">
<!ENTITY daysLeftColumnLabel "남은 일">
<!ENTITY nameColumnLabel "이름">
<!ENTITY ageColumnLabel "나이">
<!ENTITY dateOfBirthColumnLabel "행사 날짜">
<!ENTITY dateOfBirthFoundColumnLabel "발견 된 날짜">
<!ENTITY emailColumnLabel "이메일">
<!ENTITY sendEmailLabel "새 메시지 쓰기">