зеркало из https://github.com/mozilla/gecko-dev.git
Checked in patch 165084 for bug 173562:
Need to import Outlook CSV exported data
This commit is contained in:
Родитель
1a81891299
Коммит
289056d99a
|
@ -595,56 +595,79 @@ function promptToKeepEntry(title, startTime, endTime)
|
|||
/**** parseOutlookCSVEvents
|
||||
*
|
||||
* Takes a text block of Outlook-exported Comma Separated Values and tries to
|
||||
* parse that into individual events (with a mother-of-all-regexps).
|
||||
* Returns: an array of new calendarEvents and
|
||||
* an array of events that are duplicates with existing ones.
|
||||
* parse that into individual events.
|
||||
*
|
||||
* First line is field names, all quoted with double quotes. Field names are
|
||||
* locale dependendent. In English the recognized field names are:
|
||||
* "Title","Start Date","Start Time","End Date","End Time","All day event",
|
||||
* "Reminder on/off","Reminder Date","Reminder Time","Categories",
|
||||
* "Description","Location","Private"
|
||||
* Not all fields are necessary. If some fields do not match known field names,
|
||||
* a dialog is presented to the user to match fields.
|
||||
*
|
||||
* The rest of the lines are events, one event per line, with fields in the
|
||||
* order descibed by the first line. All non-empty values must be quoted.
|
||||
*
|
||||
* Returns: an array of parsed calendarEvents.
|
||||
* If the parse is cancelled, a zero length array is returned.
|
||||
*/
|
||||
function parseOutlookCSVEvents( outlookCsvStr ) {
|
||||
|
||||
// boolRegExp: regexp for finding a boolean value from event (6. field)
|
||||
// headerRegExp: regexp for reading CSV header line
|
||||
// eventRegExp: regexp for reading events (this one'll be constructed on fly)
|
||||
var boolRegExp = /^".*",".*",".*",".*",".*","(.*)?",".*"/;
|
||||
var headerRegExp = /^"(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?","(.*)?"/g;
|
||||
var eventRegExp;
|
||||
headerRegExp.lastIndex=0;
|
||||
parse: {
|
||||
// parse header line of quoted comma separated column names.
|
||||
var trimEndQuotesRegExp = /^"(.*)"$/m;
|
||||
var trimResults = trimEndQuotesRegExp.exec( outlookCsvStr );
|
||||
var header = trimResults && trimResults[1].split(/","/);
|
||||
if( header == null )
|
||||
break parse;
|
||||
|
||||
//array for storing events values (from eventRegExp)
|
||||
var eventFields;
|
||||
|
||||
var formater = new DateFormater();
|
||||
var sDate;
|
||||
var eDate;
|
||||
var alarmDate;
|
||||
|
||||
var calendarEvent;
|
||||
var eventArray = new Array();
|
||||
var dupArray = new Array();
|
||||
|
||||
var args;
|
||||
var knownIndxs = 0;
|
||||
var boolTestFields;
|
||||
|
||||
var header = headerRegExp( outlookCsvStr );
|
||||
|
||||
if( header != null ) {
|
||||
//strip header from string
|
||||
outlookCsvStr = outlookCsvStr.slice(headerRegExp.lastIndex + 2);
|
||||
outlookCsvStr = outlookCsvStr.slice(trimResults[0].length);
|
||||
|
||||
var args = new Object();
|
||||
//args.cancelled is about window cancel, not about event
|
||||
args.cancelled = false;
|
||||
//args.fieldList contains the field names from the first row of CSV
|
||||
args.fieldList = header;
|
||||
|
||||
// set indexes if Outlook language happened to be same as locale
|
||||
const outlookCSVTitle = gCalendarBundle.getString("outlookCSVTitle");
|
||||
const outlookCSVStartDate = gCalendarBundle.getString("outlookCSVStartDate");
|
||||
const outlookCSVStartTime = gCalendarBundle.getString("outlookCSVStartTime");
|
||||
const outlookCSVEndDate = gCalendarBundle.getString("outlookCSVEndDate");
|
||||
const outlookCSVEndTime = gCalendarBundle.getString("outlookCSVEndTime");
|
||||
const outlookCSVAllDayEvent = gCalendarBundle.getString("outlookCSVAllDayEvent");
|
||||
const outlookCSVAlarm = gCalendarBundle.getString("outlookCSVAlarm");
|
||||
const outlookCSVAlarmDate = gCalendarBundle.getString("outlookCSVAlarmDate");
|
||||
const outlookCSVAlarmTime = gCalendarBundle.getString("outlookCSVAlarmTime");
|
||||
const outlookCSVCategories = gCalendarBundle.getString("outlookCSVCategories");
|
||||
const outlookCSVDescription = gCalendarBundle.getString("outlookCSVDescription");
|
||||
const outlookCSVLocation = gCalendarBundle.getString("outlookCSVLocation");
|
||||
const outlookCSVPrivate = gCalendarBundle.getString("outlookCSVPrivate");
|
||||
const outlookCSVValueTrue = gCalendarBundle.getString("outlookCSVValueTrue");
|
||||
const outlookCSVValueFalse = gCalendarBundle.getString("outlookCSVValueFalse");
|
||||
|
||||
// get a sample boolean value from the first event.
|
||||
// Note: this asssumes that field number 6 is a boolean value
|
||||
boolTestFields = boolRegExp(outlookCsvStr);
|
||||
|
||||
if( ( boolTestFields != null ) && ( boolTestFields[1].length>0 ) ) {
|
||||
|
||||
args = new Object();
|
||||
//args.cancelled is about window cancel, not about event
|
||||
args.cancelled = false;
|
||||
//args.fieldList contains the field names from the first row of CSV
|
||||
args.fieldList = header.slice(1);
|
||||
args.boolStr = boolTestFields[1];
|
||||
|
||||
// set default indexes for a Outlook2000 CSV file
|
||||
var knownIndxs = 0;
|
||||
for( var i = 1; i <= header.length; i++) {
|
||||
switch( header[i-1] ) {
|
||||
case outlookCSVTitle: args.titleIndex = i; knownIndxs++; break;
|
||||
case outlookCSVStartDate: args.startDateIndex = i; knownIndxs++; break;
|
||||
case outlookCSVStartTime: args.startTimeIndex = i; knownIndxs++; break;
|
||||
case outlookCSVEndDate: args.endDateIndex = i; knownIndxs++; break;
|
||||
case outlookCSVEndTime: args.endTimeIndex = i; knownIndxs++; break;
|
||||
case outlookCSVAllDayEvent: args.allDayIndex = i; knownIndxs++; break;
|
||||
case outlookCSVAlarm: args.alarmIndex = i; knownIndxs++; break;
|
||||
case outlookCSVAlarmDate: args.alarmDateIndex = i; knownIndxs++; break;
|
||||
case outlookCSVAlarmTime: args.alarmTimeIndex = i; knownIndxs++; break;
|
||||
case outlookCSVCategories: args.categoriesIndex = i; knownIndxs++; break;
|
||||
case outlookCSVDescription: args.descriptionIndex = i; knownIndxs++; break;
|
||||
case outlookCSVLocation: args.locationIndex = i; knownIndxs++; break;
|
||||
case outlookCSVPrivate: args.privateIndex = i; knownIndxs++; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (knownIndxs == 0 && header.length == 22) {
|
||||
// set default indexes for a default Outlook2000 CSV file
|
||||
args.titleIndex = 1;
|
||||
args.startDateIndex = 2;
|
||||
args.startTimeIndex = 3;
|
||||
|
@ -658,119 +681,215 @@ function parseOutlookCSVEvents( outlookCsvStr ) {
|
|||
args.descriptionIndex = 16;
|
||||
args.locationIndex = 17;
|
||||
args.privateIndex = 20;
|
||||
|
||||
// set indexes if Outlook language happened to be english
|
||||
for( var i = 1; i < header.length; i++)
|
||||
switch( header[i] ) {
|
||||
case "Subject": args.titleIndex = i; knownIndxs++; break;
|
||||
case "Start Date": args.startDateIndex = i; knownIndxs++; break;
|
||||
case "Start Time": args.startTimeIndex = i; knownIndxs++; break;
|
||||
case "End Date": args.endDateIndex = i; knownIndxs++; break;
|
||||
case "End Time": args.endTimeIndex = i; knownIndxs++; break;
|
||||
case "All day event": args.allDayIndex = i; knownIndxs++; break;
|
||||
case "Reminder on/off": args.alarmIndex = i; knownIndxs++; break;
|
||||
case "Reminder Date": args.alarmDateIndex = i; knownIndxs++; break;
|
||||
case "Reminder Time": args.alarmTimeIndex = i; knownIndxs++; break;
|
||||
case "Categories": args.categoriesIndex = i; knownIndxs++; break;
|
||||
case "Description": args.descriptionIndex = i; knownIndxs++; break;
|
||||
case "Location": args.locationIndex = i; knownIndxs++; break;
|
||||
case "Private": args.privateIndex = i; knownIndxs++; break;
|
||||
}
|
||||
}
|
||||
|
||||
// again, if language is english...
|
||||
if( args.boolStr == "True" ) args.boolIsTrue = true;
|
||||
else if( args.boolStr == "False" ) args.boolIsTrue = false;
|
||||
|
||||
// show field select -dialog if language wasn't english
|
||||
// (or if MS decided to change column names)
|
||||
if( ( args.boolIsTrue == null ) || ( knownIndxs != 13 ) ) {
|
||||
|
||||
// just any value...
|
||||
args.boolIsTrue = false;
|
||||
|
||||
// Dialog will update values in args.* according to user choices.
|
||||
window.setCursor( "wait" );
|
||||
openDialog( "chrome://calendar/content/outlookImportDialog.xul", "caOutlookImport", "chrome,modal,resizable=yes", args );
|
||||
}
|
||||
|
||||
if( !args.cancelled ) {
|
||||
|
||||
// Construct event regexp according to field indexes. The regexp can
|
||||
// be made stricter, if it seems this matches too loosely.
|
||||
var regExpStr = "^";
|
||||
for( i = 1; i < header.length; i++ ) {
|
||||
if( i != 1 )
|
||||
regExpStr += ",";
|
||||
if( i == args.descriptionIndex )
|
||||
regExpStr += "(.*(?:[\\s\\S]*)?.*)?";
|
||||
else
|
||||
regExpStr += "(.*)?";
|
||||
}
|
||||
regExpStr += "\\r\\n";
|
||||
|
||||
eventRegExp = new RegExp( regExpStr, "gm" );
|
||||
eventFields = eventRegExp( outlookCsvStr );
|
||||
if( eventFields != null ) {
|
||||
do {
|
||||
eventFields[0] ="";
|
||||
//strip quotation marks
|
||||
for( i=1; i < eventFields.length; i++ )
|
||||
if( eventFields[i].length > 0 )
|
||||
eventFields[i] = eventFields[i].slice( 1, -1 );
|
||||
|
||||
// At this point eventFields contains following fields. Position
|
||||
// of fields is in args.[fieldname]Index.
|
||||
// subject, start date, start time, end date, end time,
|
||||
// all day?, alarm?, alarm date, alarm time,
|
||||
// Description, Categories, Location, Private?
|
||||
// Unused fields (could maybe be copied to Description):
|
||||
// Meeting Organizer, Required Attendees, Optional Attendees,
|
||||
// Meeting Resources, Billing Information, Mileage, Priority,
|
||||
// Sensitivity, Show time as
|
||||
|
||||
//parseShortDate magically decides the format (locale) of dates/times
|
||||
sDate = formater.parseShortDate( eventFields[args.startDateIndex] + " " +
|
||||
eventFields[args.startTimeIndex] );
|
||||
eDate = formater.parseShortDate( eventFields[args.endDateIndex] + " " +
|
||||
eventFields[args.endTimeIndex] );
|
||||
alarmDate = formater.parseShortDate( eventFields[args.alarmDateIndex] + " " +
|
||||
eventFields[args.alarmTimeIndex] );
|
||||
if( ( sDate != null ) && ( eDate != null ) ) {
|
||||
|
||||
calendarEvent = createEvent();
|
||||
|
||||
calendarEvent.id = createUniqueID();
|
||||
calendarEvent.title = eventFields[args.titleIndex];
|
||||
calendarEvent.start.setTime( sDate );
|
||||
calendarEvent.end.setTime( eDate );
|
||||
calendarEvent.alarmLength = Math.round( ( sDate - alarmDate ) / kDate_MillisecondsInMinute );
|
||||
calendarEvent.alarmUnits = "minutes";
|
||||
calendarEvent.setParameter( "ICAL_RELATED_PARAMETER", "ICAL_RELATED_START" );
|
||||
calendarEvent.description = eventFields[args.descriptionIndex];
|
||||
calendarEvent.categories = eventFields[args.categoriesIndex];
|
||||
calendarEvent.location = eventFields[args.locationIndex];
|
||||
|
||||
if( args.boolIsTrue ) {
|
||||
calendarEvent.allDay = ( eventFields[args.allDayIndex] == args.boolStr );
|
||||
calendarEvent.alarm = ( eventFields[args.alarmIndex] == args.boolStr );
|
||||
calendarEvent.privateEvent = ( eventFields[args.privateIndex] == args.boolStr );
|
||||
} else {
|
||||
calendarEvent.allDay = ( eventFields[args.allDayIndex] != args.boolStr );
|
||||
calendarEvent.alarm = ( eventFields[args.alarmIndex] != args.boolStr );
|
||||
calendarEvent.privateEvent = ( eventFields[args.privateIndex] != args.boolStr );
|
||||
}
|
||||
|
||||
//save the event into return array
|
||||
eventArray[eventArray.length] = calendarEvent;
|
||||
}
|
||||
//get next events fields
|
||||
eventFields = eventRegExp( outlookCsvStr );
|
||||
} while( eventRegExp.lastIndex !=0 )
|
||||
}
|
||||
}
|
||||
// show field select dialog if not all headers matched
|
||||
if(knownIndxs != header.length) {
|
||||
window.setCursor( "wait" );
|
||||
openDialog( "chrome://calendar/content/outlookImportDialog.xul", "caOutlookImport", "chrome,modal,resizable=yes", args );
|
||||
if( args.cancelled )
|
||||
break parse;
|
||||
}
|
||||
}
|
||||
return eventArray;
|
||||
|
||||
// Construct event regexp according to field indexes. The regexp can
|
||||
// be made stricter, if it seems this matches too loosely.
|
||||
var regExpStr = "^";
|
||||
for( i = 1; i <= header.length; i++ ) {
|
||||
if( i > 1 ) regExpStr += ",";
|
||||
regExpStr += "(?:\"((?:[^\"]|\"\")*)\")?";
|
||||
}
|
||||
regExpStr += "$";
|
||||
|
||||
// eventRegExp: regexp for reading events (this one'll be constructed on fly)
|
||||
const eventRegExp = new RegExp( regExpStr, "gm" );
|
||||
|
||||
// match first line
|
||||
var eventFields = eventRegExp( outlookCsvStr );
|
||||
|
||||
if( eventFields == null )
|
||||
break parse;
|
||||
|
||||
// if boolean field used, find boolean value based on selected indexes
|
||||
if (args.allDayIndex || args.alarmIndex || args.privateIndex) {
|
||||
// get a sample boolean value from any boolean column of the first event.
|
||||
// again, if imported language is same as locale...
|
||||
args.boolStr = ( eventFields[args.allDayIndex] ||
|
||||
eventFields[args.alarmIndex] ||
|
||||
eventFields[args.privateIndex] );
|
||||
|
||||
if (args.boolStr) { // if not all empty string, test for true/false
|
||||
if( args.boolStr.toLowerCase() == outlookCSVValueTrue.toLowerCase())
|
||||
args.boolIsTrue = true;
|
||||
else if(args.boolStr.toLowerCase() == outlookCSVValueFalse.toLowerCase())
|
||||
args.boolIsTrue = false;
|
||||
else {
|
||||
window.setCursor( "wait" );
|
||||
openDialog( "chrome://calendar/content/outlookImportBooleanDialog.xul", "caOutlookImport", "chrome,modal,resizable=yes", args );
|
||||
if( args.cancelled )
|
||||
break parse;
|
||||
}
|
||||
} else { // else field is empty string, treat it as false
|
||||
args.boolIsTrue = false;
|
||||
}
|
||||
} else { // no boolean columns, just set default
|
||||
args.boolStr = outlookCSVValueTrue;
|
||||
args.boolIsTrue = true;
|
||||
}
|
||||
|
||||
var dateParseConfirmed = false;
|
||||
var eventArray = new Array();
|
||||
const dateFormat = new DateFormater();
|
||||
do {
|
||||
// At this point eventFields contains following fields. Position
|
||||
// of fields is in args.[fieldname]Index.
|
||||
// subject, start date, start time, end date, end time,
|
||||
// all day?, alarm?, alarm date, alarm time,
|
||||
// Description, Categories, Location, Private?
|
||||
// Unused fields (could maybe be copied to Description):
|
||||
// Meeting Organizer, Required Attendees, Optional Attendees,
|
||||
// Meeting Resources, Billing Information, Mileage, Priority,
|
||||
// Sensitivity, Show time as
|
||||
|
||||
//parseShortDate magically decides the format (locale) of dates/times
|
||||
var title = ("titleIndex" in args
|
||||
? parseOutlookTextField(args, "titleIndex", eventFields) : "");
|
||||
var sDate = parseOutlookDateTimeFields(args, "startDateIndex", "startTimeIndex",
|
||||
eventFields, dateFormat);
|
||||
var eDate = parseOutlookDateTimeFields(args, "endDateIndex", "endTimeIndex",
|
||||
eventFields, dateFormat);
|
||||
var alarmDate = parseOutlookDateTimeFields(args, "alarmDateIndex", "alarmTimeIndex",
|
||||
eventFields, dateFormat);
|
||||
if ( title || sDate ) {
|
||||
|
||||
if (!dateParseConfirmed) {
|
||||
// Check if parsing with current date format is acceptable by
|
||||
// checking that each parsed date formats to same string. This is
|
||||
// inside event loop in case the first event's dates are ambiguous.
|
||||
// For example, 2/3/2004 works with both D/M/YYYY or M/D/YYYY so it
|
||||
// is ambiguous, but 20/3/2004 only works with D/M/YYYY, and would
|
||||
// produce 8/3/2005 with M/D/YYYY.
|
||||
var startDateString = ("startDateIndex" in args? eventFields[args.startDateIndex] : "");
|
||||
var endDateString = ("endDateIndex" in args? eventFields[args.endDateIndex] : "");
|
||||
var alarmDateString = ("alarmDateIndex" in args? eventFields[args.alarmDateIndex] : "");
|
||||
var dateIndexes = ["startDateIndex", "endDateIndex", "alarmDateIndex"];
|
||||
var parsedDates = [sDate, eDate, alarmDate];
|
||||
for (var j = 0; j < dateIndexes.length; j++) {
|
||||
var indexName = dateIndexes[j];
|
||||
var dateString = (indexName in args? eventFields[args[indexName]] : "");
|
||||
var parsedDate = parsedDates[j];
|
||||
var formattedDate = null;
|
||||
if (dateString &&
|
||||
(parsedDate == null ||
|
||||
dateString != (formattedDate = dateFormat.getShortFormatedDate(parsedDate)))) {
|
||||
// A difference found, or an unparseable date found, so ask user to confirm date format.
|
||||
//"A date in this file is formatted as "%1$S".\n\
|
||||
// The operating system is set to parse this date as "%2$S".\n\
|
||||
// Is this OK?\n\
|
||||
// (If not, adjust settings so format matches, then restart this application.)"
|
||||
const outlookCSVDateParseConfirm =
|
||||
gCalendarBundle.getFormattedString("outlookCSVDateParseConfirm",
|
||||
[startDateString, formattedDate]);
|
||||
dateParseConfirmed = confirm(outlookCSVDateParseConfirm);
|
||||
if (! dateParseConfirmed)
|
||||
break parse; // parsed date not acceptable, abort parse.
|
||||
else
|
||||
break; // parsed date format acceptable, no need to check more dates.
|
||||
}
|
||||
}
|
||||
}
|
||||
var calendarEvent = createEvent();
|
||||
|
||||
calendarEvent.id = createUniqueID();
|
||||
calendarEvent.title = title;
|
||||
|
||||
if ("allDayIndex" in args)
|
||||
calendarEvent.allDay = (args.boolStr == eventFields[args.allDayIndex]
|
||||
? args.boolIsTrue : !args.boolIsTrue);
|
||||
if ("alarmIndex" in args)
|
||||
calendarEvent.alarm = (args.boolStr == eventFields[args.alarmIndex]
|
||||
? args.boolIsTrue : !args.boolIsTrue);
|
||||
if ("privateIndex" in args)
|
||||
calendarEvent.privateEvent = (args.boolStr == eventFields[args.privateIndex]
|
||||
? args.boolIsTrue : !args.boolIsTrue);
|
||||
|
||||
if (!eDate && sDate) {
|
||||
eDate = new Date(sDate);
|
||||
if (calendarEvent.allDay)
|
||||
// end date is exclusive, so set to next day after start.
|
||||
eDate.setDate(eDate.getDate() + 1);
|
||||
}
|
||||
if (sDate)
|
||||
calendarEvent.start.setTime( sDate );
|
||||
if (eDate)
|
||||
calendarEvent.end.setTime( eDate );
|
||||
if (alarmDate) {
|
||||
var len, units;
|
||||
var minutes = Math.round( ( sDate - alarmDate ) / kDate_MillisecondsInMinute );
|
||||
var hours = Math.round(minutes / 60 );
|
||||
if (minutes != hours*60) {
|
||||
len = minutes;
|
||||
units = "minutes";
|
||||
} else {
|
||||
var days = Math.round(hours / 24);
|
||||
if (hours != days * 24) {
|
||||
len = hours;
|
||||
units = "hours";
|
||||
} else {
|
||||
len = days;
|
||||
units = "days";
|
||||
}
|
||||
}
|
||||
calendarEvent.alarmLength = len;
|
||||
calendarEvent.alarmUnits = units;
|
||||
calendarEvent.setParameter( "ICAL_RELATED_PARAMETER", "ICAL_RELATED_START" );
|
||||
}
|
||||
if ("descriptionIndex" in args)
|
||||
calendarEvent.description = parseOutlookTextField(args, "descriptionIndex", eventFields);
|
||||
if ("categoriesIndex" in args)
|
||||
calendarEvent.categories = parseOutlookTextField(args, "categoriesIndex", eventFields);
|
||||
if ("locationIndex" in args)
|
||||
calendarEvent.location = parseOutlookTextField(args, "locationIndex", eventFields);
|
||||
|
||||
//save the event into return array
|
||||
eventArray[eventArray.length] = calendarEvent;
|
||||
}
|
||||
|
||||
//get next events fields
|
||||
eventFields = eventRegExp( outlookCsvStr );
|
||||
|
||||
} while( eventRegExp.lastIndex !=0 );
|
||||
|
||||
// return results
|
||||
return eventArray;
|
||||
|
||||
} // end parse
|
||||
return new Array(); // parse cancelled, return empty array
|
||||
}
|
||||
|
||||
/** PRIVATE **/
|
||||
function parseOutlookDateTimeFields(args, dateIndexName, timeIndexName, eventFields, dateFormat)
|
||||
{
|
||||
var startDateString = (dateIndexName in args? eventFields[args[dateIndexName]] : "");
|
||||
var startTimeString = (timeIndexName in args? eventFields[args[timeIndexName]] : "");
|
||||
if (startDateString)
|
||||
if (startTimeString)
|
||||
return dateFormat.parseShortDate( startDateString + " " + startTimeString );
|
||||
else
|
||||
return dateFormat.parseShortDate( startDateString );
|
||||
else
|
||||
if (startTimeString)
|
||||
return dateFormat.parseTimeOfDay( startTimeString );
|
||||
else
|
||||
return null;
|
||||
}
|
||||
/** PRIVATE **/
|
||||
function parseOutlookTextField(args, textIndexName, eventFields)
|
||||
{
|
||||
var textString = (textIndexName in args? eventFields[args[textIndexName]] : "");
|
||||
if (textString)
|
||||
return textString.replace("\"\"", "\"");
|
||||
else
|
||||
return textString; // null or empty
|
||||
}
|
||||
|
||||
/**** parseIcalEvents
|
||||
|
@ -792,7 +911,7 @@ function parseIcalEvents( icalStr )
|
|||
|
||||
var calendarEvent = createEvent();
|
||||
|
||||
// if parsing import iCalendar failed, add date as description
|
||||
// if parsing import iCalendar failed, add data as description
|
||||
if ( !calendarEvent.parseIcalString(eventData) )
|
||||
{
|
||||
// initialize start and end dates.
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Mozilla Calendar code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Jussi Kukkonen (jussi.kukkonen@welho.com).
|
||||
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/**
|
||||
* Window variables
|
||||
*/
|
||||
|
||||
var args;
|
||||
|
||||
/**
|
||||
* Called when the dialog is loaded (which is done by Outlook-CSV parser when
|
||||
* Outlook CSV data.is not in english or it is otherwise impossible to
|
||||
* decipher without user input.
|
||||
*/
|
||||
function loadOutlookImportBooleanDialog()
|
||||
{
|
||||
args = window.arguments[0];
|
||||
|
||||
var boolLabel = document.getElementById( "bool-label" );
|
||||
boolLabel.setAttribute( "value", args.boolStr + " =" );
|
||||
|
||||
opener.setCursor( "auto" );
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the OK button is clicked.
|
||||
*/
|
||||
function onOKCommand()
|
||||
{
|
||||
args.boolIsTrue = ( document.getElementById( "bool-list" ).selectedIndex == 1 );
|
||||
args.cancelled = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the Cancel button is clicked.
|
||||
*/
|
||||
function onCancelCommand()
|
||||
{
|
||||
args.cancelled = true;
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
-
|
||||
- The contents of this file are subject to the Mozilla Public License Version
|
||||
- 1.1 (the "License"); you may not use this file except in compliance with
|
||||
- the License. You may obtain a copy of the License at
|
||||
- http://www.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS IS" basis,
|
||||
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
- for the specific language governing rights and limitations under the
|
||||
- License.
|
||||
-
|
||||
- The Original Code is Mozilla Calendar code.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Jussi Kukkonen (jussi.kukkonen@welho.com).
|
||||
- Portions created by the Initial Developer are Copyright (C) 2004
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
- in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
- of those above. If you wish to allow use of your version of this file only
|
||||
- under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
- use your version of this file under the terms of the MPL, indicate your
|
||||
- decision by deleting the provisions above and replace them with the notice
|
||||
- and other provisions required by the LGPL or the GPL. If you do not delete
|
||||
- the provisions above, a recipient may use your version of this file under
|
||||
- the terms of any one of the MPL, the GPL or the LGPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE dialog
|
||||
[
|
||||
<!ENTITY % dtd1 SYSTEM "chrome://calendar/locale/global.dtd" > %dtd1;
|
||||
<!ENTITY % dtd2 SYSTEM "chrome://calendar/locale/calendar.dtd" > %dtd2;
|
||||
]>
|
||||
|
||||
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:nc="http://home.netscape.com/NC-rdf#"
|
||||
id="calendar-import-outlook-boolean-dialog"
|
||||
title="&calendar.importoutlook.dialog.title;"
|
||||
onload="loadOutlookImportBooleanDialog()"
|
||||
buttons="accept,cancel"
|
||||
ondialogaccept="return onOKCommand();"
|
||||
ondialogcancel="return onCancelCommand();">
|
||||
|
||||
<script type="application/x-javascript" src="chrome://calendar/content/outlookImportBooleanDialog.js"/>
|
||||
|
||||
<vbox>
|
||||
<label value="&calendar.importoutlook.selectmeaning.label;"/>
|
||||
<hbox>
|
||||
<spacer flex="1"/>
|
||||
<grid>
|
||||
<rows>
|
||||
<row align="center">
|
||||
<hbox pack="end">
|
||||
<label id="bool-label"/>
|
||||
</hbox>
|
||||
<menulist id="bool-list">
|
||||
<menupopup>
|
||||
<menuitem label="&calendar.importoutlook.false.label;" value="0"/>
|
||||
<menuitem label="&calendar.importoutlook.true.label;" value="1"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</dialog>
|
|
@ -49,79 +49,89 @@ function loadOutlookImportDialog()
|
|||
{
|
||||
args = window.arguments[0];
|
||||
|
||||
var oldList;
|
||||
var menuList;
|
||||
|
||||
var k;
|
||||
|
||||
//fill all menupopups
|
||||
menuList = document.getElementById( "title-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.titleIndex;
|
||||
if ("titleIndex" in args)
|
||||
menuList.selectedIndex = args.titleIndex;
|
||||
menuList.focus();
|
||||
|
||||
menuList = document.getElementById( "startdate-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.startDateIndex;
|
||||
if ("startDateIndex" in args)
|
||||
menuList.selectedIndex = args.startDateIndex;
|
||||
|
||||
menuList = document.getElementById( "starttime-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.startTimeIndex;
|
||||
if ("startTimeIndex" in args)
|
||||
menuList.selectedIndex = args.startTimeIndex;
|
||||
|
||||
menuList = document.getElementById( "enddate-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.endDateIndex;
|
||||
if ("endDateIndex" in args)
|
||||
menuList.selectedIndex = args.endDateIndex;
|
||||
|
||||
menuList = document.getElementById( "endtime-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.endTimeIndex;
|
||||
if ("endTimeIndex" in args)
|
||||
menuList.selectedIndex = args.endTimeIndex;
|
||||
|
||||
menuList = document.getElementById( "location-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.locationIndex;
|
||||
if ("locationIndex" in args)
|
||||
menuList.selectedIndex = args.locationIndex;
|
||||
|
||||
menuList = document.getElementById( "description-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.descriptionIndex;
|
||||
if ("descriptionIndex" in args)
|
||||
menuList.selectedIndex = args.descriptionIndex;
|
||||
|
||||
menuList = document.getElementById( "allday-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.allDayIndex;
|
||||
if ("allDayIndex" in args)
|
||||
menuList.selectedIndex = args.allDayIndex;
|
||||
|
||||
menuList = document.getElementById( "private-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.privateIndex;
|
||||
if ("privateIndex" in args)
|
||||
menuList.selectedIndex = args.privateIndex;
|
||||
|
||||
menuList = document.getElementById( "alarm-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.alarmIndex;
|
||||
if ("alarmIndex" in args)
|
||||
menuList.selectedIndex = args.alarmIndex;
|
||||
|
||||
menuList = document.getElementById( "alarmdate-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.alarmDateIndex;
|
||||
if ("alarmDateIndex" in args)
|
||||
menuList.selectedIndex = args.alarmDateIndex;
|
||||
|
||||
menuList = document.getElementById( "alarmtime-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.alarmTimeIndex;
|
||||
if ("alarmTimeIndex" in args)
|
||||
menuList.selectedIndex = args.alarmTimeIndex;
|
||||
|
||||
menuList = document.getElementById( "categories-list" );
|
||||
for( var k = 0; k < args.fieldList.length; k++ )
|
||||
for( k = 0; k < args.fieldList.length; k++ )
|
||||
menuList.appendItem( args.fieldList[k] );
|
||||
menuList.selectedIndex = args.categoriesIndex;
|
||||
if ("categoriesIndex" in args)
|
||||
menuList.selectedIndex = args.categoriesIndex;
|
||||
|
||||
boolLabel = document.getElementById( "bool-label" );
|
||||
boolLabel.setAttribute ( "value", args.boolStr + " =" );
|
||||
|
||||
opener.setCursor( "auto" );
|
||||
}
|
||||
|
||||
|
@ -145,7 +155,6 @@ function onOKCommand()
|
|||
args.descriptionIndex = document.getElementById( "description-list" ).selectedIndex;
|
||||
args.locationIndex = document.getElementById( "location-list" ).selectedIndex;
|
||||
args.privateIndex = document.getElementById( "private-list" ).selectedIndex;
|
||||
args.boolIsTrue = ( document.getElementById( "bool-list" ).selectedIndex == 1 );
|
||||
args.cancelled = false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -197,24 +197,4 @@
|
|||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<label value="Please select the meaning of the following word:"/>
|
||||
<hbox>
|
||||
<spacer flex="1"/>
|
||||
<grid>
|
||||
<rows>
|
||||
<row align="center">
|
||||
<hbox pack="end">
|
||||
<label id="bool-label"/>
|
||||
</hbox>
|
||||
<menulist id="bool-list">
|
||||
<menupopup>
|
||||
<menuitem label="&calendar.importoutlook.false.label;" value="0"/>
|
||||
<menuitem label="&calendar.importoutlook.true.label;" value="1"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</dialog>
|
|
@ -169,6 +169,32 @@ filterCsv=Separats per comes
|
|||
filterOutlookCsv=Format separat per comes d'Outlook
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error en obtenir el calendari
|
||||
httpError=L'obtenció del fitxer de calendari ha fallat.\nStatus code: %1$S: %2$S
|
||||
|
|
|
@ -168,6 +168,32 @@ filterCsv=Odd\u011Blen\u00E9 \u010D\u00E1rkou
|
|||
filterOutlookCsv=Outlook odd\u011Blen\u00E9 \u010D\u00E1rkou
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Chyba p\u0159i z\u00EDsk\u00E1v\u00E1n\u00ED kalend\u00E1\u0159e
|
||||
httpError=Z\u00EDsk\u00E1n\u00ED souboru kalend\u00E1\u0159e selhalo.\nChyba: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Ymwahannwyd gan gollnod
|
|||
filterOutlookCsv=Ymwahannwyd Outlook gan gollnod
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error getting calendar
|
||||
httpError=Getting the calendar file failed.\nStatus code: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Durch Komma getrennt
|
|||
filterOutlookCsv=Outlook, durch Komma getrennt
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Fehler beim Holen des Kalenders
|
||||
httpError=Holen der Kalenderdatei fehlgeschlagen.\nStatuscode\: %1$S\: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Comma Separated
|
|||
filterOutlookCsv=Outlook Comma Separated
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error getting calendar
|
||||
httpError=Getting the calendar file failed.\nStatus code: %1$S: %2$S
|
||||
|
|
|
@ -168,6 +168,32 @@ filterCsv=Separados por comas
|
|||
filterOutlookCsv=Separados por comas de Outlook
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error al obtener el calendario
|
||||
httpError=La recuperaci\u00F3n del archivo de calendario ha fallado.\nC\u00F3digo de estado\: %1$S\: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=S\u00e9par\u00e9 avec des virgules
|
|||
filterOutlookCsv=S\u00e9par\u00e9 avec des virgules (Outlook)
|
||||
filterRdf=RDF iCalendar
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Erreur lors de l'importation du calendrier
|
||||
httpError=\u00c9chec de l'importation du fichier calendrier.\nCode d'erreur\u00a0: %1$S\u00a0: %2$S
|
||||
|
|
|
@ -171,6 +171,32 @@ filterCsv=Vessz\u0151vel elv\u00e1lasztott (CSV)
|
|||
filterOutlookCsv=Outlook vessz\u0151vel elv\u00e1lasztott
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Hiba a napt\u00e1r let\u00f6lt\u00e9sekor
|
||||
httpError=A napt\u00e1rf\u00e1jl let\u00f6lt\u00e9se nem siker\u00fclt.\n\u00c1llapotk\u00f3d: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Comma Separated (CSV)
|
|||
filterOutlookCsv=Outlook Comma Separated (CSV)
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Errore lettura calendario
|
||||
httpError=Lettura file calendario fallita.\nCodice Stato\: %1$S\: %2$S
|
||||
|
|
|
@ -174,6 +174,32 @@ filterCsv=\u30ab\u30f3\u30de\u533a\u5207\u308a
|
|||
filterOutlookCsv=Outlook \u30ab\u30f3\u30de\u533a\u5207\u308a
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=\u30ab\u30ec\u30f3\u30c0\u30fc\u306e\u53d6\u5f97\u30a8\u30e9\u30fc
|
||||
httpError=\u30ab\u30ec\u30f3\u30c0\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\n\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Skirtukai \u2013 kableliai
|
|||
filterOutlookCsv=Skirtukai \u2013 kableliai (Outlook)
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error getting calendar
|
||||
httpError=Getting the calendar file failed.\nStatus code: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Komma-gescheiden
|
|||
filterOutlookCsv=Outlook komma-gescheiden
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Fout tijdens het ophalen van de kalender
|
||||
httpError=Het ophalen van het kalenderbestand is mislukt.\nStatuscode: %1$S: %2$S
|
||||
|
|
|
@ -168,6 +168,32 @@ filterCsv=Oddzielany przecinkami (CSV)
|
|||
filterOutlookCsv=Outlook Comma Separated
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error getting calendar
|
||||
httpError=Getting the calendar file failed.\nStatus code: %1$S: %2$S
|
||||
|
|
|
@ -170,6 +170,32 @@ filterCsv=Arquivos Separados por Vírgula (CSV)
|
|||
filterOutlookCsv=Arquivos Outlook Separados por Vírgula (CSV)
|
||||
filterRdf=Arquivo iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Erro ao buscar calendário
|
||||
httpError=Busca ao arquivo de calendário falhou.\nCódigo de status: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Oddelen\u00E9 \u010Diarkou
|
|||
filterOutlookCsv=Outlook oddelen\u00E9 \u010Diarkou
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Pr\u00EDjem vzdialen\u00E9ho kalend\u00E1ru
|
||||
httpError=Pr\u00EDjem vzdialen\u00E9ho kalend\u00E1ru zlyhal.\n\u010C\u00EDslo chyby: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Datoteke CSV
|
|||
filterOutlookCsv=Datoteke Outlook CSV
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Napaka pri pridobivanju koledarja
|
||||
httpError=Pridobivanje koledarske datoteke ni uspelo.\nKoda stanja: %1$S: %2$S
|
||||
|
|
|
@ -170,6 +170,32 @@ filterCsv=Komma Separerade
|
|||
filterOutlookCsv=Outlooks Komma Separerade
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error getting calendar
|
||||
httpError=Getting the calendar file failed.\nStatus code: %1$S: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Virg\u00FCl ile ayr\u0131ld\u0131
|
|||
filterOutlookCsv=Outlook, virg\u00FCl ile ayr\u0131lacak
|
||||
filterRdf=iCalendar RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Takvimin y\u00FCklenmesi hatal\u0131
|
||||
httpError=Takvim dosyas\u0131n\u0131n y\u00FCklenmesi ba\u015Far\u0131s\u0131z.\nDurum kodu\: %1$S\: %2$S
|
||||
|
|
|
@ -169,6 +169,32 @@ filterCsv=Z komu d\u017a\u011blene
|
|||
filterOutlookCsv=Outlook z komu d\u017a\u011blene
|
||||
filterRdf=iCalendar-RDF
|
||||
|
||||
# Literal Outlook CSV headers. Take from a .csv file exported by Outlook.
|
||||
# For matching first line of .csv file to import Outlook Comma Separated events.
|
||||
outlookCSVTitle =Subject
|
||||
outlookCSVStartDate =Start Date
|
||||
outlookCSVStartTime =Start Time
|
||||
outlookCSVEndDate =End Date
|
||||
outlookCSVEndTime =End Time
|
||||
outlookCSVAllDayEvent=All day event
|
||||
outlookCSVAlarm =Reminder on/off
|
||||
outlookCSVAlarmDate =Reminder Date
|
||||
outlookCSVAlarmTime =Reminder Time
|
||||
outlookCSVCategories =Categories
|
||||
outlookCSVDescription=Description
|
||||
outlookCSVLocation =Location
|
||||
outlookCSVPrivate =Private
|
||||
# Literal values for True and False in .csv files exported by Outlook
|
||||
outlookCSVValueTrue =True
|
||||
outlookCSVValueFalse =False
|
||||
|
||||
# Questions to user about how to parse values
|
||||
outlookCSVDateParseConfirm=\
|
||||
A date in this file is formatted as "%1$S".\n\
|
||||
The operating system is set to parse this date as "%2$S".\n\
|
||||
Is this OK?\n\
|
||||
(If not, adjust settings so format matches, then restart this application.)
|
||||
|
||||
# Remote calendar errors
|
||||
errorTitle=Error getting calendar
|
||||
httpError=Getting the calendar file failed.\nStatus code: %1$S: %2$S
|
||||
|
|
Загрузка…
Ссылка в новой задаче