Bug 291799 Implement Spell as you Type for mailnews

p=me r=neil.parkwaycc.co.uk/mnyromyr sr=bienvenu a=asa
This commit is contained in:
bugzilla%arlen.demon.co.uk 2005-05-13 22:01:44 +00:00
Родитель e86ace6e20
Коммит e4d4313227
8 изменённых файлов: 134 добавлений и 231 удалений

Просмотреть файл

@ -783,6 +783,8 @@
address your message.</li> address your message.</li>
<li><strong>Check Spelling:</strong> Checks the spelling of the message text <li><strong>Check Spelling:</strong> Checks the spelling of the message text
before you send it. You can also click Spell.</li> before you send it. You can also click Spell.</li>
<li><strong>Spellcheck As You Type:</strong> Choose this option to have the
spelling of the message text checked as you type.</li>
<li><strong>Rewrap:</strong> If you are composing a message using the <li><strong>Rewrap:</strong> If you are composing a message using the
plain-text editor, you can use the Rewrap command to rewrap long lines of plain-text editor, you can use the Rewrap command to rewrap long lines of
quoted text to fit the Compose window. This command rewraps selected quoted quoted text to fit the Compose window. This command rewraps selected quoted
@ -4524,6 +4526,9 @@ to filter unwanted mail.</p>
<li><strong>Check spelling before sending</strong>: Select this option to <li><strong>Check spelling before sending</strong>: Select this option to
have Mail &amp; Newsgroups always check the spelling of your message before have Mail &amp; Newsgroups always check the spelling of your message before
you send it.</li> you send it.</li>
<li><strong>Check spelling as you type</strong>: Select this option to have
Mail &amp; Newsgroups always check the spelling of your message as you type
it.</li>
<li><strong>For messages that contain 8-bit characters, use &apos;quoted <li><strong>For messages that contain 8-bit characters, use &apos;quoted
printable&apos; MIME encoding</strong>: Choose to have Mail &amp; printable&apos; MIME encoding</strong>: Choose to have Mail &amp;
Newsgroups use <q>quoted printable</q> MIME encoding when sending regular Newsgroups use <q>quoted printable</q> MIME encoding when sending regular

Просмотреть файл

@ -16,7 +16,7 @@
<script type="application/x-javascript"> <script type="application/x-javascript">
<![CDATA[ <![CDATA[
var _elementIDs = ["forwardMessageMode", "autoSave", var _elementIDs = ["forwardMessageMode", "autoSave",
"autoSaveInterval","spellCheckBeforeSend", "autoSaveInterval","spellCheckBeforeSend", "inlineSpellCheck",
"strictlyMime", "mailWarnOnSendAccelKey", "strictlyMime", "mailWarnOnSendAccelKey",
"wrapLength", "sendDefaultCharsetList", "wrapLength", "sendDefaultCharsetList",
"replyInDefaultCharset", "FontSelect", "replyInDefaultCharset", "FontSelect",
@ -28,8 +28,9 @@
function Startup() function Startup()
{ {
document.getElementById("spellCheckBeforeSend").hidden = var hideSpellCheck = !("@mozilla.org/spellchecker;1" in Components.classes);
!("@mozilla.org/spellchecker;1" in Components.classes); document.getElementById("spellCheckBeforeSend").hidden = hideSpellCheck;
document.getElementById("inlineSpellCheck").hidden = hideSpellCheck;
gAutoSaveInterval = document.getElementById("autoSaveInterval"); gAutoSaveInterval = document.getElementById("autoSaveInterval");
enableTextbox(document.getElementById("autoSave"), gAutoSaveInterval, true); enableTextbox(document.getElementById("autoSave"), gAutoSaveInterval, true);
} }
@ -87,10 +88,16 @@
<label value="&autoSaveEnd.label;"/> <label value="&autoSaveEnd.label;"/>
</hbox> </hbox>
<hbox align="center">
<checkbox id="spellCheckBeforeSend" label="&spellCheck.label;" <checkbox id="spellCheckBeforeSend" label="&spellCheck.label;"
prefstring="mail.SpellCheckBeforeSend" prefstring="mail.SpellCheckBeforeSend"
accesskey="&spellCheck.accesskey;"/> accesskey="&spellCheck.accesskey;"/>
<checkbox id="inlineSpellCheck" label="&spellCheckInline.label;"
prefstring="mail.spellcheck.inline"
accesskey="&spellCheckInline.accesskey;"/>
</hbox>
<checkbox id="strictlyMime" label="&useMIME.label;" <checkbox id="strictlyMime" label="&useMIME.label;"
prefstring="mail.strictly_mime" prefstring="mail.strictly_mime"
accesskey="&useMIME.accesskey;"/> accesskey="&useMIME.accesskey;"/>

Просмотреть файл

@ -55,6 +55,8 @@
<!ENTITY autoSaveEnd.label "minutes"> <!ENTITY autoSaveEnd.label "minutes">
<!ENTITY spellCheck.label "Check spelling before sending"> <!ENTITY spellCheck.label "Check spelling before sending">
<!ENTITY spellCheck.accesskey "C"> <!ENTITY spellCheck.accesskey "C">
<!ENTITY spellCheckInline.label "Check spelling as you type">
<!ENTITY spellCheckInline.accesskey "e">
<!-- LOCALIZATION NOTE (wrapOutMsg.label): This will concatenate with "xxx characters", using a number and (char.label). --> <!-- LOCALIZATION NOTE (wrapOutMsg.label): This will concatenate with "xxx characters", using a number and (char.label). -->
<!ENTITY wrapOutMsg.label "Wrap plain text messages at"> <!ENTITY wrapOutMsg.label "Wrap plain text messages at">
<!ENTITY wrapOutMsg.accesskey "W"> <!ENTITY wrapOutMsg.accesskey "W">

Просмотреть файл

@ -21,6 +21,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* Ian Neal <bugzilla@arlen.demon.co.uk>
* *
* Alternatively, the contents of this file may be used under the terms of * Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"), * either of the GNU General Public License Version 2 or later (the "GPL"),
@ -606,6 +607,25 @@ function updateComposeItems() {
} catch(e) {} } catch(e) {}
} }
function openEditorContextMenu()
{
// if we have a mispelled word, show spellchecker context
// menuitems as well as the usual context menu
var spellCheckNoSuggestionsItem = document.getElementById('spellCheckNoSuggestions');
var word;
var misspelledWordStatus = InlineSpellChecker.updateSuggestionsMenu(document.getElementById('msgComposeContext'),
spellCheckNoSuggestionsItem, word);
var hideSpellingItems = (misspelledWordStatus == kSpellNoMispelling);
spellCheckNoSuggestionsItem.hidden = hideSpellingItems || misspelledWordStatus != kSpellNoSuggestionsFound;
document.getElementById('spellCheckAddToDictionary').hidden = hideSpellingItems;
document.getElementById('spellCheckIgnoreWord').hidden = hideSpellingItems;
document.getElementById('spellCheckAddSep').hidden = hideSpellingItems;
document.getElementById('spellCheckSuggestionsSeparator').hidden = hideSpellingItems;
updateEditItems();
}
function updateEditItems() { function updateEditItems() {
goUpdateCommand("cmd_pasteNoFormatting"); goUpdateCommand("cmd_pasteNoFormatting");
goUpdateCommand("cmd_pasteQuote"); goUpdateCommand("cmd_pasteQuote");
@ -1285,6 +1305,8 @@ function ComposeStartup(recycled, aParams)
gMsgCompose.compFields.returnReceipt); gMsgCompose.compFields.returnReceipt);
document.getElementById("cmd_attachVCard").setAttribute('checked', document.getElementById("cmd_attachVCard").setAttribute('checked',
gMsgCompose.compFields.attachVCard); gMsgCompose.compFields.attachVCard);
document.getElementById("menu_inlineSpellCheck").setAttribute('checked',
sPrefs.getBoolPref("mail.spellcheck.inline"));
// If recycle, editor is already created // If recycle, editor is already created
if (!recycled) if (!recycled)
@ -1347,8 +1369,7 @@ function ComposeStartup(recycled, aParams)
if (recycled) if (recycled)
{ {
// This sets charset and does reply quote insertion InitEditor(GetCurrentEditor());
gMsgCompose.initEditor(GetCurrentEditor(), window.content);
if (gMsgCompose.composeHTML) if (gMsgCompose.composeHTML)
{ {
@ -1395,7 +1416,7 @@ var gMsgEditorCreationObserver =
{ {
var editor = GetCurrentEditor(); var editor = GetCurrentEditor();
if (editor && GetCurrentCommandManager() == aSubject) if (editor && GetCurrentCommandManager() == aSubject)
gMsgCompose.initEditor(editor, window.content); InitEditor(editor);
} }
} }
} }
@ -1998,6 +2019,43 @@ function SelectAddress()
AdjustFocus(); AdjustFocus();
} }
// walk through the recipients list and add them to the inline spell checker ignore list
function addRecipientsToIgnoreList(aAddressesToAdd)
{
if (InlineSpellChecker.inlineSpellChecker && InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell)
{
// break the list of potentially many recipients back into individual names
var hdrParser = Components.classes["@mozilla.org/messenger/headerparser;1"].getService(Components.interfaces.nsIMsgHeaderParser);
var emailAddresses = {};
var names = {};
var fullNames = {};
var numAddresses = hdrParser.parseHeadersWithArray(aAddressesToAdd, emailAddresses, names, fullNames);
var tokenizedNames = [];
// each name could consist of multiple words delimited by commas and/or spaces.
// i.e. Green Lantern or Lantern,Green.
for (var i = 0; i < names.value.length; i++)
{
var splitNames = names.value[i].match(/[^\s,]+/g);
if (splitNames)
tokenizedNames = tokenizedNames.concat(splitNames);
}
InlineSpellChecker.inlineSpellChecker.ignoreWords(tokenizedNames, tokenizedNames.length);
}
}
function ToggleInlineSpellChecker(target)
{
if (InlineSpellChecker.inlineSpellChecker)
{
InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell = !InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell;
if (InlineSpellChecker.inlineSpellChecker.enableRealTimeSpell)
InlineSpellChecker.checkDocument(window.content.document);
}
}
function ToggleReturnReceipt(target) function ToggleReturnReceipt(target)
{ {
var msgCompFields = gMsgCompose.compFields; var msgCompFields = gMsgCompose.compFields;
@ -2644,6 +2702,9 @@ function LoadIdentity(startup)
// catch the exception and ignore it, so that if LDAP setup // catch the exception and ignore it, so that if LDAP setup
// fails, the entire compose window doesn't end up horked // fails, the entire compose window doesn't end up horked
} }
// only do this if we aren't starting up....it gets done as part of startup already
addRecipientsToIgnoreList(gCurrentIdentity.identityName);
} }
} }
} }
@ -3061,3 +3122,16 @@ function AutoSave()
gAutoSaveTimeout = setTimeout(AutoSave, gAutoSaveInterval); gAutoSaveTimeout = setTimeout(AutoSave, gAutoSaveInterval);
} }
function InitEditor(editor)
{
gMsgCompose.initEditor(editor, window.content);
try {
InlineSpellChecker.Init(editor, sPrefs.getBoolPref("mail.spellcheck.inline"));
// Following line works round bug 292520, look at removing after that is fixed
InlineSpellChecker.checkDocument(window.content.document);
} catch (e) {
// InlineSpellChecker.Init throws if there is no inline spellchecker
// so disable menuitem.
document.getElementById('menu_inlineSpellCheck').setAttribute('disabled', true);
}
}

Просмотреть файл

@ -19,6 +19,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* Ian Neal <bugzilla@arlen.demon.co.uk>
* *
* Alternatively, the contents of this file may be used under the terms of * Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"), * either of the GNU General Public License Version 2 or later (the "GPL"),
@ -57,6 +58,7 @@ var gMimeHeaderParser = null;
*/ */
var test_addresses_sequence = false; var test_addresses_sequence = false;
try { try {
if (sPrefs) if (sPrefs)
test_addresses_sequence = sPrefs.getBoolPref("mail.debug.test_addresses_sequence"); test_addresses_sequence = sPrefs.getBoolPref("mail.debug.test_addresses_sequence");
@ -238,6 +240,10 @@ function CompFields2Recipients(msgCompFields, msgType)
parent.replaceChild(newListBoxNode, listbox); parent.replaceChild(newListBoxNode, listbox);
awFitDummyRows(2); awFitDummyRows(2);
// CompFields2Recipients is called whenever a user replies or edits an existing message.
// We want to add all of the recipients for this message to the ignore list for spell check
addRecipientsToIgnoreList((gCurrentIdentity ? gCurrentIdentity.identityName + ', ' : '') + msgTo + ', ' + msgCC + ', ' + msgBCC);
gMimeHeaderParser = null; //Release the mime parser gMimeHeaderParser = null; //Release the mime parser
} }
} }
@ -365,6 +371,9 @@ function awAddRecipient(recipientType, address)
awAppendNewRow(true); awAppendNewRow(true);
awSetInputAndPopupValue(awGetInputElement(top.MAX_RECIPIENTS), "", awGetPopupElement(top.MAX_RECIPIENTS), "addr_to", top.MAX_RECIPIENTS); awSetInputAndPopupValue(awGetInputElement(top.MAX_RECIPIENTS), "", awGetPopupElement(top.MAX_RECIPIENTS), "addr_to", top.MAX_RECIPIENTS);
} }
// add the recipient to our spell check ignore list
addRecipientsToIgnoreList(address);
} }
function awTestRowSequence() function awTestRowSequence()
@ -491,6 +500,10 @@ function awReturnHit(inputElement)
nextInput.select(); nextInput.select();
awSetFocus(row+1, nextInput); awSetFocus(row+1, nextInput);
} }
// be sure to add the recipient to our ignore list
// when the user hits enter in an autocomplete widget...
addRecipientsToIgnoreList(inputElement.value);
} }
function awDeleteHit(inputElement) function awDeleteHit(inputElement)
@ -725,7 +738,7 @@ function _awSetFocus()
function awTabFromRecipient(element, event) function awTabFromRecipient(element, event)
{ {
//If we are le last element in the listbox, we don't want to create a new row. //If we are the last element in the listbox, we don't want to create a new row.
if (element == awGetInputElement(top.MAX_RECIPIENTS)) if (element == awGetInputElement(top.MAX_RECIPIENTS))
top.doNotCreateANewRow = true; top.doNotCreateANewRow = true;
@ -735,6 +748,10 @@ function awTabFromRecipient(element, event)
var listBox = document.getElementById("addressingWidget"); var listBox = document.getElementById("addressingWidget");
listBox.listBoxObject.ensureIndexIsVisible(listBoxRow + 1); listBox.listBoxObject.ensureIndexIsVisible(listBoxRow + 1);
} }
// be sure to add the recipient to our ignore list
// when the user tabs out of an autocomplete line...
addRecipientsToIgnoreList(element.value);
} }
function awTabFromMenulist(element, event) function awTabFromMenulist(element, event)

Просмотреть файл

@ -24,6 +24,7 @@
- Ben Goodger <ben@netscape.com> (ass'td polish fixes) - Ben Goodger <ben@netscape.com> (ass'td polish fixes)
- Håkan Waara <hwaara@chello.se> - Håkan Waara <hwaara@chello.se>
- Neil Rashbrook <neil@parkwaycc.co.uk> (ass'td polish fix) - Neil Rashbrook <neil@parkwaycc.co.uk> (ass'td polish fix)
- Ian Neal <bugzilla@arlen.demon.co.uk>
- -
- Alternatively, the contents of this file may be used under the terms of - Alternatively, the contents of this file may be used under the terms of
- either of the GNU General Public License Version 2 or later (the "GPL"), - either of the GNU General Public License Version 2 or later (the "GPL"),
@ -93,6 +94,7 @@
<script type="application/x-javascript" src="chrome://messenger/content/widgetglue.js"/> <script type="application/x-javascript" src="chrome://messenger/content/widgetglue.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/mail-offline.js"/> <script type="application/x-javascript" src="chrome://messenger/content/mail-offline.js"/>
<script type="application/x-javascript" src="chrome://editor/content/editor.js"/> <script type="application/x-javascript" src="chrome://editor/content/editor.js"/>
<script type="application/x-javascript" src="chrome://editor/content/editorInlineSpellCheck.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/messengercompose/MsgComposeCommands.js"/> <script type="application/x-javascript" src="chrome://messenger/content/messengercompose/MsgComposeCommands.js"/>
<!-- drag and drop --> <!-- drag and drop -->
@ -208,7 +210,16 @@
<keyset id="editorKeys"/> <keyset id="editorKeys"/>
<popup id="sidebarPopup"/> <popup id="sidebarPopup"/>
<popup id="msgComposeContext" onpopupshowing="updateEditItems();">
<popup id="msgComposeContext" onpopupshowing="openEditorContextMenu();">
<menuitem id="spellCheckNoSuggestions" label="&spellCheckNoSuggestions.label;" disabled="true"/>
<menuseparator id="spellCheckAddSep"/>
<menuitem id="spellCheckAddToDictionary" label="&spellCheckAddToDictionary.label;" accesskey="&spellCheckAddToDictionary.accesskey;"
oncommand="InlineSpellChecker.addToDictionary(null,null);"/>
<menuitem id="spellCheckIgnoreWord" label="&spellCheckIgnoreWord.label;" accesskey="&spellCheckIgnoreWord.accesskey;"
oncommand="InlineSpellChecker.ignoreWord(null, null)"/>
<menuseparator id="spellCheckSuggestionsSeparator"/>
<menuitem label="&undo.label;" accesskey="&undo.accesskey;" command="cmd_undo"/> <menuitem label="&undo.label;" accesskey="&undo.accesskey;" command="cmd_undo"/>
<menuseparator/> <menuseparator/>
<menuitem label="&cut.label;" accesskey="&cut.accesskey;" command="cmd_cut"/> <menuitem label="&cut.label;" accesskey="&cut.accesskey;" command="cmd_cut"/>
@ -329,6 +340,9 @@
<menupopup id="optionsMenuPopup" onpopupshowing="updateOptionItems();"> <menupopup id="optionsMenuPopup" onpopupshowing="updateOptionItems();">
<menuitem label="&selectAddressCmd.label;" accesskey="&selectAddressCmd.accesskey;" command="cmd_selectAddress"/> <menuitem label="&selectAddressCmd.label;" accesskey="&selectAddressCmd.accesskey;" command="cmd_selectAddress"/>
<menuitem label="&checkSpellingCmd.label;" id="menu_checkspelling" accesskey="&checkSpellingCmd.accesskey;" key="key_checkspelling" command="cmd_spelling"/> <menuitem label="&checkSpellingCmd.label;" id="menu_checkspelling" accesskey="&checkSpellingCmd.accesskey;" key="key_checkspelling" command="cmd_spelling"/>
<menuitem label="&enableInlineSpellChecker.label;" id="menu_inlineSpellCheck"
accesskey="&enableInlineSpellChecker.accesskey;" type="checkbox"
oncommand="ToggleInlineSpellChecker(event.target)"/>
<menuitem label="&quoteCmd.label;" accesskey="&quoteCmd.accesskey;" command="cmd_quoteMessage"/> <menuitem label="&quoteCmd.label;" accesskey="&quoteCmd.accesskey;" command="cmd_quoteMessage"/>
<menuseparator/> <menuseparator/>
<menuitem id="returnReceiptMenu" type="checkbox" label="&returnReceiptMenu.label;" accesskey="&returnReceiptMenu.accesskey;" checked="false" oncommand="ToggleReturnReceipt(event.target)"/> <menuitem id="returnReceiptMenu" type="checkbox" label="&returnReceiptMenu.label;" accesskey="&returnReceiptMenu.accesskey;" checked="false" oncommand="ToggleReturnReceipt(event.target)"/>

Просмотреть файл

@ -1,217 +0,0 @@
<!--LOCALIZATION NOTE messengercompose.dtd Main UI for message composition -->
<!ENTITY msgComposeWindow.title "Compose: (no subject)">
<!ENTITY fromAddr.label "From:">
<!ENTITY fromAddr.accesskey "r">
<!ENTITY subject.label "Subject:">
<!ENTITY subject.accesskey "S">
<!ENTITY attachments.label "Attachments:">
<!ENTITY attachments.accesskey "c">
<!-- menu items: the . means that the menu item isn't implemented yet -->
<!-- File menu items -->
<!ENTITY newMessage.label "Message">
<!ENTITY newMessage.accesskey "M">
<!ENTITY saveCmd.label "Save">
<!ENTITY saveCmd.key "S">
<!ENTITY saveCmd.accesskey "s">
<!ENTITY saveAsCmd.label "Save As">
<!ENTITY saveAsCmd.accesskey "A">
<!ENTITY saveAsFileCmd.label "File...">
<!ENTITY saveAsFileCmd.accesskey "F">
<!ENTITY saveAsDraftCmd.label "Draft">
<!ENTITY saveAsDraftCmd.accesskey "D">
<!ENTITY saveAsTemplateCmd.label "Template">
<!ENTITY saveAsTemplateCmd.accesskey "T">
<!ENTITY attachMenu.label "Attach">
<!ENTITY attachMenu.accesskey "t">
<!ENTITY attachFileCmd.label "File(s)...">
<!ENTITY attachFileCmd.key "">
<!ENTITY attachFileCmd.accesskey "F">
<!ENTITY attachPageCmd.label "Web Page...">
<!ENTITY attachPageCmd.accesskey "W">
<!--LOCALIZATION NOTE attachVCardCmd.label Don't translate the term 'vCard' -->
<!ENTITY attachVCardCmd.label "Personal Card (vCard)">
<!ENTITY attachVCardCmd.accesskey "P">
<!ENTITY sendNowCmd.label "Send Now">
<!ENTITY sendCmd.keycode "VK_RETURN">
<!ENTITY sendNowCmd.accesskey "d">
<!ENTITY sendLaterCmd.label "Send Later">
<!ENTITY sendLaterCmd.keycode "VK_RETURN">
<!ENTITY sendLaterCmd.accesskey "L">
<!ENTITY printSetupCmd.label "Page Setup...">
<!ENTITY printSetupCmd.accesskey "u">
<!ENTITY printCmd.label "Print...">
<!ENTITY printCmd.key "P">
<!ENTITY printCmd.accesskey "P">
<!ENTITY closeCmd.label "Close">
<!-- Edit menu items -->
<!ENTITY editRewrapCmd.label "Rewrap">
<!ENTITY editRewrapCmd.accesskey "w">
<!ENTITY findCmd.label "Find and Replace...">
<!ENTITY findCmd.key "F">
<!ENTITY findCmd.accesskey "F">
<!ENTITY findAgainCmd.label "Find Again">
<!ENTITY findAgainCmd.key "G">
<!ENTITY findAgainCmd.accesskey "g">
<!ENTITY findAgainCmd.key2 "VK_F3">
<!ENTITY findPrevCmd.label "Find Previous">
<!ENTITY findPrevCmd.key "G">
<!ENTITY findPrevCmd.key2 "VK_F3">
<!ENTITY findPrevCmd.accesskey "v">
<!ENTITY accountManagerCmd.label "Mail &amp; Newsgroups Account Settings...">
<!ENTITY accountManagerCmd.accesskey "m">
<!-- View menu items -->
<!ENTITY showComposeToolbarCmd.label "Mail Toolbar">
<!ENTITY showComposeToolbarCmd.accesskey "o">
<!ENTITY showFormatToolbarCmd.label "Formatting Toolbar">
<!ENTITY showFormatToolbarCmd.accesskey "F">
<!ENTITY showParagraphMarksCmd.label ".Show Paragraph Marks">
<!ENTITY pageSourceCmd.label ".Page Source">
<!ENTITY pageSourceCmd.accesskey "u">
<!ENTITY pageInfoCmd.label ".Page Info">
<!ENTITY pageInfoCmd.accesskey "I">
<!ENTITY dcharMenu.label "Character Set">
<!ENTITY dcharIso1Cmd.label "Western (ISO-8859-1)">
<!ENTITY dcharIso2Cmd.label "Central European (ISO-8859-2)">
<!ENTITY dcharIso3Cmd.label "South European (ISO-8859-3)">
<!ENTITY dcharIso4Cmd.label "Baltic (ISO-8859-4)">
<!ENTITY dcharIso9Cmd.label "Turkish (ISO-8859-9)">
<!ENTITY dcharIso10Cmd.label "Nordic (ISO-8859-10)">
<!ENTITY dcharIso14Cmd.label "Celtic (ISO-8859-14)">
<!ENTITY dcharIso15Cmd.label "Western (ISO-8859-15)">
<!ENTITY dcharJapanCmd.label "Japanese (ISO-2022-JP)">
<!ENTITY dcharTradChiBigCmd.label "Chinese Traditional (Big5)">
<!ENTITY dcharSimpChiGbCmd.label "Chinese Simplified (GB2312)">
<!ENTITY dcharKoreanCmd.label "Korean (EUC-KR)">
<!ENTITY dcharUtf8Cmd.label "Unicode (UTF-8)">
<!ENTITY dcharRusCmd.label "Cyrillic (KOI8-R)">
<!ENTITY dcharUkrCmd.label "Cyrillic/Ukrainian (KOI8-U)">
<!ENTITY dcharIsoGreekCmd.label "Greek (ISO-8859-7)">
<!ENTITY dcharVietViCmd.label "Vietnamese (VISCII)">
<!ENTITY dcharThaiCmd.label "Thai (TIS-620)">
<!ENTITY dcharArmCmd.label "Armenian (ARMSCII-8)">
<!ENTITY dcharDEFAULT.label "Set Default Mail Send Character Set">
<!-- Format menu items -->
<!ENTITY formatMenu.label "Format">
<!ENTITY formatMenu.accesskey "o">
<!-- Options menu items -->
<!ENTITY optionsMenu.label "Options">
<!ENTITY optionsMenu.accesskey "p">
<!ENTITY doNotCompleteAddrCmd.label ".Do Not Complete Address">
<!ENTITY showMatchingAddrCmd.label ".Show Matching Address">
<!ENTITY addSignatureCmd.label ".Add Signature File">
<!ENTITY quoteCmd.label "Quote Message">
<!ENTITY quoteCmd.accesskey "Q">
<!ENTITY selectAddressCmd.label "Select Addresses...">
<!ENTITY selectAddressCmd.key "">
<!ENTITY selectAddressCmd.accesskey "A">
<!ENTITY checkSpellingCmd.label "Check Spelling...">
<!ENTITY checkSpellingCmd.key "K">
<!ENTITY checkSpellingCmd.accesskey "S">
<!ENTITY priorityMenu.label "Priority">
<!ENTITY priorityMenu.accesskey "p">
<!ENTITY lowestPriorityCmd.label "Lowest">
<!ENTITY lowestPriorityCmd.accesskey "l">
<!ENTITY lowPriorityCmd.label "Low">
<!ENTITY lowPriorityCmd.accesskey "o">
<!ENTITY normalPriorityCmd.label "Normal">
<!ENTITY normalPriorityCmd.accesskey "n">
<!ENTITY highPriorityCmd.label "High">
<!ENTITY highPriorityCmd.accesskey "i">
<!ENTITY highestPriorityCmd.label "Highest">
<!ENTITY highestPriorityCmd.accesskey "H">
<!ENTITY returnReceiptMenu.label "Return Receipt">
<!ENTITY returnReceiptMenu.accesskey "t">
<!ENTITY outputFormatMenu.label "Format">
<!ENTITY outputFormatMenu.accesskey "f">
<!ENTITY autoFormatCmd.label "Auto-Detect">
<!ENTITY autoFormatCmd.accesskey "a">
<!ENTITY plainTextFormatCmd.label "Plain Text Only">
<!ENTITY plainTextFormatCmd.accesskey "p">
<!ENTITY htmlFormatCmd.label "Rich Text (HTML) Only">
<!ENTITY htmlFormatCmd.accesskey "r">
<!ENTITY bothFormatCmd.label "Plain and Rich (HTML) Text">
<!ENTITY bothFormatCmd.accesskey "l">
<!ENTITY UuencodeAttachmentCmd.label "Uuencode instead of MIME for Attachments">
<!ENTITY fileCarbonCopyCmd.label "Send a Copy To">
<!ENTITY fileCarbonCopyCmd.accesskey "d">
<!ENTITY fileHereMenu.label "File Here">
<!--LOCALIZATION NOTE Debug Menu Don't translate anything in the Debug menu section -->
<!-- Debug Menu, imported from editorAppShell.dtd -->
<!ENTITY debugMenu.label "Debug">
<!ENTITY outputTextCmd.label "Output Text">
<!ENTITY outputHTMLCmd.label "Output HTML">
<!ENTITY insertTextCmd.label "Insert Text">
<!ENTITY testSelectionCmd.label "Test Selection">
<!ENTITY testTableLayoutCmd.label "Test Table Layout">
<!ENTITY testDocumentCmd.label "Test Document">
<!ENTITY showEmbeddedCmd.label "Show Embedded Objects">
<!ENTITY dumpContentCmd.label "Dump Content Tree">
<!ENTITY runUnitTestsCmd.label "Run Unit Tests">
<!ENTITY startLogCmd.label "Start Log">
<!ENTITY stopLogCmd.label "Stop Log">
<!ENTITY runLogCmd.label "Run Log">
<!--LOCALIZATION NOTE Toolbar items Don't change any "chrome://" URLs -->
<!-- Toolbar items -->
<!ENTITY sendButton.label "Send">
<!ENTITY quoteButton.label "Quote">
<!ENTITY addressButton.label "Address">
<!ENTITY attachButton.label "Attach">
<!ENTITY spellingButton.label "Spelling">
<!ENTITY saveButton.label "Save">
<!ENTITY stopButton.label "Stop">
<!--tooltips-->
<!-- We already inherit &menuBar.tooltip and &mailToolbar.tooltip from messenger.dtd -->
<!ENTITY addressBar.tooltip "Address Bar">
<!ENTITY formatToolbar.tooltip "Formatting Toolbar">
<!ENTITY sendButton.tooltip "Send this message now">
<!ENTITY sendlaterButton.tooltip "Send this message later">
<!ENTITY quoteButton.tooltip "Quote the previous message">
<!ENTITY addressButton.tooltip "Select a recipient from an Address Book">
<!ENTITY attachButton.tooltip "Include an attachment">
<!ENTITY saveButton.tooltip "Save this message">
<!ENTITY stopButton.tooltip "Stop the current transfer">
<!-- Toolbar items, imported from editorAppShell.xul -->
<!--LOCALIZATION NOTE formatToolbar. Don't change any of these Style Characters -->
<!ENTITY formatToolbar.boldChar "B">
<!ENTITY formatToolbar.italicChar "I">
<!ENTITY formatToolbar.underlineChar "U">
<!-- context menu items -->
<!ENTITY undo.label "Undo">
<!ENTITY undo.accesskey "U">
<!ENTITY cut.label "Cut">
<!ENTITY cut.accesskey "t">
<!ENTITY copy.label "Copy">
<!ENTITY copy.accesskey "C">
<!ENTITY paste.label "Paste">
<!ENTITY paste.accesskey "P">
<!ENTITY pasteQuote.label "Paste As Quotation">
<!ENTITY pasteQuote.accesskey "Q">
<!ENTITY delete.label "Delete">
<!ENTITY delete.accesskey "D">
<!ENTITY selectAll.label "Select All">
<!ENTITY selectAll.accesskey "A">
<!ENTITY attachFile.label "Attach File(s)...">
<!ENTITY attachFile.accesskey "F">
<!ENTITY attachPage.label "Attach Web Page...">
<!ENTITY attachPage.accesskey "W">

Просмотреть файл

@ -510,6 +510,7 @@ pref("mailnews.nav_crosses_folders", 1); // prompt user when crossing folders
pref("news.cancel.confirm",true); pref("news.cancel.confirm",true);
pref("news.cancel.alert_on_success",true); pref("news.cancel.alert_on_success",true);
pref("mail.SpellCheckBeforeSend",false); pref("mail.SpellCheckBeforeSend",false);
pref("mail.spellcheck.inline",true);
pref("mail.warn_on_send_accel_key", true); pref("mail.warn_on_send_accel_key", true);
pref("mail.enable_autocomplete",true); pref("mail.enable_autocomplete",true);
pref("mailnews.html_domains",""); pref("mailnews.html_domains","");