diff --git a/src/digraph.c b/src/digraph.c
index a9fcba5..391b64a 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -2596,7 +2596,7 @@
 	    if (source_runtime(buf, 0) == FAIL)
 	    {
 		vim_free(buf);
-		return N_("E544: Keymap file not found");
+		return N_(e_keymap_file_not_found);
 	    }
 	}
 	vim_free(buf);
diff --git a/src/errors.h b/src/errors.h
index a7b1932..592cd6c 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -1203,20 +1203,157 @@
 	INIT(= N_("E516: No buffers were deleted"));
 EXTERN char e_no_buffers_were_wiped_out[]
 	INIT(= N_("E517: No buffers were wiped out"));
-
+EXTERN char e_unknown_option[]
+	INIT(= N_("E518: Unknown option"));
+EXTERN char e_option_not_supported[]
+	INIT(= N_("E519: Option not supported"));
+EXTERN char e_not_allowed_in_modeline[]
+	INIT(= N_("E520: Not allowed in a modeline"));
+EXTERN char e_number_required_after_equal[]
+	INIT(= N_("E521: Number required after ="));
+EXTERN char e_number_required_after_str_equal_str[]
+	INIT(= N_("E521: Number required: &%s = '%s'"));
+EXTERN char e_not_found_in_termcap[]
+	INIT(= N_("E522: Not found in termcap"));
 EXTERN char e_not_allowed_here[]
 	INIT(= N_("E523: Not allowed here"));
+EXTERN char e_missing_colon[]
+	INIT(= N_("E524: Missing colon"));
+EXTERN char e_zero_length_string[]
+	INIT(= N_("E525: Zero length string"));
+EXTERN char e_missing_number_after_angle_str_angle[]
+	INIT(= N_("E526: Missing number after <%s>"));
+EXTERN char e_missing_comma[]
+	INIT(= N_("E527: Missing comma"));
+EXTERN char e_must_specify_a_value[]
+	INIT(= N_("E528: Must specify a ' value"));
+EXTERN char e_cannot_set_term_to_empty_string[]
+	INIT(= N_("E529: Cannot set 'term' to empty string"));
+EXTERN char e_cannot_change_term_in_GUI[]
+	INIT(= N_("E530: Cannot change 'term' in the GUI"));
+EXTERN char e_use_gui_to_start_GUI[]
+	INIT(= N_("E531: Use \":gui\" to start the GUI"));
+#ifdef FEAT_NETBEANS_INTG
+EXTERN char e_highlighting_color_name_too_long_in_defineAnnoType[]
+	INIT(= N_("E532: highlighting color name too long in defineAnnoType"));
+#endif
+EXTERN char e_cant_select_wide_font[]
+	INIT(= N_("E533: can't select wide font"));
+EXTERN char e_invalid_wide_font[]
+	INIT(= N_("E534: Invalid wide font"));
+EXTERN char e_illegal_character_after_chr[]
+	INIT(= N_("E535: Illegal character after <%c>"));
+EXTERN char e_comma_required[]
+	INIT(= N_("E536: comma required"));
+EXTERN char e_commentstring_must_be_empty_or_contain_str[]
+	INIT(= N_("E537: 'commentstring' must be empty or contain %s"));
+// E538 unused (perhaps 538.nl ?)
+EXTERN char e_illegal_character_str[]
+	INIT(= N_("E539: Illegal character <%s>"));
+EXTERN char e_unclosed_expression_sequence[]
+	INIT(= N_("E540: Unclosed expression sequence"));
+// E541 unused
+EXTERN char e_unbalanced_groups[]
+	INIT(= N_("E542: unbalanced groups"));
+#ifdef MSWIN
+EXTERN char e_not_valid_codepage[]
+	INIT(= N_("E543: Not a valid codepage"));
+#endif
+EXTERN char e_keymap_file_not_found[]
+	INIT(= N_("E544: Keymap file not found"));
+EXTERN char e_missing_colon_2[]
+#ifdef CURSOR_SHAPE
+	INIT(= N_("E545: Missing colon"));
+EXTERN char e_illegal_mode[]
+	INIT(= N_("E546: Illegal mode"));
+#endif
+#ifdef FEAT_MOUSESHAPE
+EXTERN char e_illegal_mouseshape[]
+	INIT(= N_("E547: Illegal mouseshape"));
+#endif
+EXTERN char e_digit_expected[]
+	INIT(= N_("E548: digit expected"));
+EXTERN char e_illegal_percentage[]
+	INIT(= N_("E549: Illegal percentage"));
+EXTERN char e_missing_colon_3[]
+	INIT(= N_("E550: Missing colon"));
+EXTERN char e_illegal_component[]
+	INIT(= N_("E551: Illegal component"));
+EXTERN char e_digit_expected_2[]
+	INIT(= N_("E552: digit expected"));
+EXTERN char e_no_more_items[]
+	INIT(= N_("E553: No more items"));
+EXTERN char e_syntax_error_in_str_curlies[]
+	INIT(= N_("E554: Syntax error in %s{...}"));
+EXTERN char e_at_bottom_of_tag_stack[]
+	INIT(= N_("E555: at bottom of tag stack"));
+EXTERN char e_at_top_of_tag_stack[]
+	INIT(= N_("E556: at top of tag stack"));
+EXTERN char e_cannot_open_termcap_file[]
+	INIT(= N_("E557: Cannot open termcap file"));
+EXTERN char e_terminal_entry_not_found_in_terminfo[]
+	INIT(= N_("E558: Terminal entry not found in terminfo"));
+EXTERN char e_terminal_entry_not_found_in_termcap[]
+	INIT(= N_("E559: Terminal entry not found in termcap"));
+EXTERN char e_usage_cscope_str[]
+	INIT(= N_("E560: Usage: cs[cope] %s"));
+EXTERN char e_unknown_cscope_search_type[]
+	INIT(= N_("E561: unknown cscope search type"));
+EXTERN char e_usage_cstag_ident[]
+	INIT(= N_("E562: Usage: cstag <ident>"));
+EXTERN char e_stat_str_error_nr[]
+	INIT(= N_("E563: stat(%s) error: %d"));
+EXTERN char e_str_is_not_directory_or_valid_cscope_database[]
+	INIT(= N_("E564: %s is not a directory or a valid cscope database"));
 EXTERN char e_not_allowed_to_change_text_or_change_window[]
 	INIT(= N_("E565: Not allowed to change text or change window"));
+EXTERN char e_could_not_create_cscope_pipes[]
+	INIT(= N_("E566: Could not create cscope pipes"));
+EXTERN char e_no_cscope_connections[]
+	INIT(= N_("E567: no cscope connections"));
+EXTERN char e_duplicate_cscope_database_not_added[]
+	INIT(= N_("E568: duplicate cscope database not added"));
+// E569 unused
+EXTERN char e_fatal_error_in_cs_manage_matches[]
+	INIT(= N_("E570: fatal error in cs_manage_matches"));
+#ifdef DYNAMIC_TCL
+EXTERN char e_sorry_this_command_is_disabled_tcl_library_could_not_be_loaded[]
+	INIT(= N_("E571: Sorry, this command is disabled: the Tcl library could not be loaded."));
+#endif
+EXTERN char e_exit_code_nr[]
+	INIT(= N_("E572: exit code %d"));
+EXTERN char e_invalid_server_id_used_str[]
+	INIT(= N_("E573: Invalid server id used: %s"));
+EXTERN char e_unknown_register_type_nr[]
+	INIT(= N_("E574: Unknown register type %d"));
+	// E575
+EXTERN char e_illegal_starting_char[]
+	INIT(= N_("Illegal starting char"));
+	// E576
+EXTERN char e_nonr_missing_gt[]
+	INIT(= N_("Missing '>'"));
+	// E577
+EXTERN char e_illegal_register_name[]
+	INIT(= N_("Illegal register name"));
 EXTERN char e_not_allowed_to_change_text_here[]
 	INIT(= N_("E578: Not allowed to change text here"));
 #ifdef FEAT_EVAL
+EXTERN char e_if_nesting_too_deep[]
+	INIT(= N_("E579: :if nesting too deep"));
+EXTERN char e_block_nesting_too_deep[]
+	INIT(= N_("E579: block nesting too deep"));
 EXTERN char e_endif_without_if[]
 	INIT(= N_("E580: :endif without :if"));
 EXTERN char e_else_without_if[]
 	INIT(= N_("E581: :else without :if"));
 EXTERN char e_elseif_without_if[]
 	INIT(= N_("E582: :elseif without :if"));
+EXTERN char e_multiple_else[]
+	INIT(= N_("E583: multiple :else"));
+EXTERN char e_elseif_after_else[]
+	INIT(= N_("E584: :elseif after :else"));
+EXTERN char e_while_for_nesting_too_deep[]
+	INIT(= N_("E585: :while/:for nesting too deep"));
 EXTERN char e_continue_without_while_or_for[]
 	INIT(= N_("E586: :continue without :while or :for"));
 EXTERN char e_break_without_while_or_for[]
@@ -1226,14 +1363,32 @@
 EXTERN char e_endfor_without_for[]
 	INIT(= N_("E588: :endfor without :for"));
 #endif
+EXTERN char e_backupext_and_patchmode_are_equal[]
+	INIT(= N_("E589: 'backupext' and 'patchmode' are equal"));
+EXTERN char e_preview_window_already_exists[]
+	INIT(= N_("E590: A preview window already exists"));
 EXTERN char e_winheight_cannot_be_smaller_than_winminheight[]
 	INIT(= N_("E591: 'winheight' cannot be smaller than 'winminheight'"));
 EXTERN char e_winwidth_cannot_be_smaller_than_winminwidth[]
 	INIT(= N_("E592: 'winwidth' cannot be smaller than 'winminwidth'"));
-
+EXTERN char e_need_at_least_nr_lines[]
+	INIT(= N_("E593: Need at least %d lines"));
+EXTERN char e_need_at_least_nr_columns[]
+	INIT(= N_("E594: Need at least %d columns"));
+EXTERN char e_showbreak_contains_unprintable_or_wide_character[]
+	INIT(= N_("E595: 'showbreak' contains unprintable or wide character"));
+EXTERN char e_invalid_fonts[]
+	INIT(= N_("E596: Invalid font(s)"));
+EXTERN char e_cant_select_fontset[]
+	INIT(= N_("E597: can't select fontset"));
+EXTERN char e_invalid_fontset[]
+	INIT(= N_("E598: Invalid fontset"));
+EXTERN char e_value_of_imactivatekey_is_invalid[]
+	INIT(= N_("E599: Value of 'imactivatekey' is invalid"));
 #ifdef FEAT_EVAL
 EXTERN char e_missing_endtry[]
 	INIT(= N_("E600: Missing :endtry"));
+
 EXTERN char e_endtry_without_try[]
 	INIT(= N_("E602: :endtry without :try"));
 EXTERN char e_catch_without_try[]
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 9a47802..231e0f3 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -1017,7 +1017,7 @@
     cstack_T	*cstack = eap->cstack;
 
     if (cstack->cs_idx == CSTACK_LEN - 1)
-	eap->errmsg = _("E579: :if nesting too deep");
+	eap->errmsg = _(e_if_nesting_too_deep);
     else
     {
 	enter_block(cstack);
@@ -1111,10 +1111,10 @@
     {
 	if (eap->cmdidx == CMD_else)
 	{
-	    eap->errmsg = _("E583: multiple :else");
+	    eap->errmsg = _(e_multiple_else);
 	    return;
 	}
-	eap->errmsg = _("E584: :elseif after :else");
+	eap->errmsg = _(e_elseif_after_else);
 	skip = TRUE;
     }
 
@@ -1180,7 +1180,7 @@
     cstack_T	*cstack = eap->cstack;
 
     if (cstack->cs_idx == CSTACK_LEN - 1)
-	eap->errmsg = _("E585: :while/:for nesting too deep");
+	eap->errmsg = _(e_while_for_nesting_too_deep);
     else
     {
 	/*
@@ -1465,7 +1465,7 @@
     cstack_T	*cstack = eap->cstack;
 
     if (cstack->cs_idx == CSTACK_LEN - 1)
-	eap->errmsg = _("E579: block nesting too deep");
+	eap->errmsg = _(e_block_nesting_too_deep);
     else
     {
 	enter_block(cstack);
diff --git a/src/gui.c b/src/gui.c
index 292da7c..bf53caa 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -814,7 +814,7 @@
 
 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
 	if (!im_xim_isvalid_imactivate())
-	    emsg(_("E599: Value of 'imactivatekey' is invalid"));
+	    emsg(_(e_value_of_imactivatekey_is_invalid));
 #endif
 	// When 'cmdheight' was set during startup it may not have taken
 	// effect yet.
diff --git a/src/hardcopy.c b/src/hardcopy.c
index 190ca99..6b1974b 100644
--- a/src/hardcopy.c
+++ b/src/hardcopy.c
@@ -205,7 +205,7 @@
 	colonp = vim_strchr(stringp, ':');
 	if (colonp == NULL)
 	{
-	    ret = N_("E550: Missing colon");
+	    ret = e_missing_colon_3;
 	    break;
 	}
 	commap = vim_strchr(stringp, ',');
@@ -220,7 +220,7 @@
 
 	if (idx == table_size)
 	{
-	    ret = N_("E551: Illegal component");
+	    ret = e_illegal_component;
 	    break;
 	}
 	p = colonp + 1;
@@ -230,7 +230,7 @@
 	{
 	    if (!VIM_ISDIGIT(*p))
 	    {
-		ret = N_("E552: digit expected");
+		ret = e_digit_expected_2;
 		break;
 	    }
 
diff --git a/src/if_cscope.c b/src/if_cscope.c
index d76f1dd..e0dd759 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -76,7 +76,7 @@
     static void
 cs_usage_msg(csid_e x)
 {
-    (void)semsg(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage);
+    (void)semsg(_(e_usage_cscope_str), cs_cmds[(int)x].usage);
 }
 
 static enum
@@ -250,7 +250,7 @@
 
     if (*eap->arg == NUL)
     {
-	(void)emsg(_("E562: Usage: cstag <ident>"));
+	(void)emsg(_(e_usage_cstag_ident));
 	return;
     }
 
@@ -463,7 +463,7 @@
 cs_stat_emsg(char *fname)
 {
     int err = errno;
-    (void)semsg(_("E563: stat(%s) error: %d"), fname, err);
+    (void)semsg(_(e_stat_str_error_nr), fname, err);
 }
 
 
@@ -564,9 +564,8 @@
     else
     {
 	if (p_csverbose)
-	    (void)semsg(
-		_("E564: %s is not a directory or a valid cscope database"),
-		fname);
+	    (void)semsg(_(e_str_is_not_directory_or_valid_cscope_database),
+									fname);
 	goto add_err;
     }
 
@@ -742,7 +741,7 @@
 	search = 9;
 	break;
     default :
-	(void)emsg(_("E561: unknown cscope search type"));
+	(void)emsg(_(e_unknown_cscope_search_type));
 	cs_usage_msg(Find);
 	return NULL;
     }
@@ -799,7 +798,7 @@
     to_cs[0] = to_cs[1] = from_cs[0] = from_cs[1] = -1;
     if (pipe(to_cs) < 0 || pipe(from_cs) < 0)
     {
-	(void)emsg(_("E566: Could not create cscope pipes"));
+	(void)emsg(_(e_could_not_create_cscope_pipes));
 err_closing:
 	if (to_cs[0] != -1)
 	    (void)close(to_cs[0]);
@@ -838,7 +837,7 @@
 	if (!(pipe_stdin = CreatePipe(&stdin_rd, &stdin_wr, &sa, 0))
 		|| !(pipe_stdout = CreatePipe(&stdout_rd, &stdout_wr, &sa, 0)))
 	{
-	    (void)emsg(_("E566: Could not create cscope pipes"));
+	    (void)emsg(_(e_could_not_create_cscope_pipes));
 err_closing:
 	    if (pipe_stdin)
 	    {
@@ -1014,7 +1013,7 @@
 
     if (cs_check_for_connections() == FALSE)
     {
-	(void)emsg(_("E567: no cscope connections"));
+	(void)emsg(_(e_no_cscope_connections));
 	return FALSE;
     }
 
@@ -1356,7 +1355,7 @@
 	    )
 	{
 	    if (p_csverbose)
-		(void)emsg(_("E568: duplicate cscope database not added"));
+		(void)emsg(_(e_duplicate_cscope_database_not_added));
 	    return -1;
 	}
 
@@ -1665,7 +1664,7 @@
 	cs_print_tags_priv(mp, cp, cnt);
 	break;
     default:	// should not reach here
-	iemsg(_("E570: fatal error in cs_manage_matches"));
+	iemsg(_(e_fatal_error_in_cs_manage_matches));
 	return NULL;
     }
 
diff --git a/src/if_tcl.c b/src/if_tcl.c
index 65f25c1..75f904a 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -1710,7 +1710,7 @@
 #ifdef DYNAMIC_TCL
     if (!tcl_enabled(TRUE))
     {
-	emsg(_("E571: Sorry, this command is disabled: the Tcl library could not be loaded."));
+	emsg(_(e_sorry_this_command_is_disabled_tcl_library_could_not_be_loaded));
 	return FAIL;
     }
 #endif
@@ -1874,7 +1874,7 @@
     {
 	char buf[50];
 
-	sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
+	sprintf(buf, _(e_exit_code_nr), tclinfo.exitvalue);
 	tclerrmsg(buf);
 	if (tclinfo.exitvalue == 0)
 	{
diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c
index 6e653c5..81a4d9d 100644
--- a/src/if_xcmdsrv.c
+++ b/src/if_xcmdsrv.c
@@ -720,7 +720,7 @@
 
     sscanf((char *)str, "0x%x", &id);
     if (id == None)
-	semsg(_("E573: Invalid server id used: %s"), str);
+	semsg(_(e_invalid_server_id_used_str), str);
 
     return (Window)id;
 }
diff --git a/src/mbyte.c b/src/mbyte.c
index e9febcb..2f4edd5 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -513,7 +513,7 @@
 	else if (GetLastError() == ERROR_INVALID_PARAMETER)
 	{
 codepage_invalid:
-	    return N_("E543: Not a valid codepage");
+	    return N_(e_not_valid_codepage);
 	}
     }
 #endif
diff --git a/src/misc2.c b/src/misc2.c
index 3a8012a..6a65ec4 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -2066,9 +2066,9 @@
 	    commap = vim_strchr(modep, ',');
 
 	    if (colonp == NULL || (commap != NULL && commap < colonp))
-		return N_("E545: Missing colon");
+		return e_missing_colon_2;
 	    if (colonp == modep)
-		return N_("E546: Illegal mode");
+		return e_illegal_mode;
 
 	    /*
 	     * Repeat for all mode's before the colon.
@@ -2094,7 +2094,7 @@
 				break;
 			if (idx == SHAPE_IDX_COUNT
 				   || (shape_table[idx].used_for & what) == 0)
-			    return N_("E546: Illegal mode");
+			    return e_illegal_mode;
 			if (len == 2 && modep[0] == 'v' && modep[1] == 'e')
 			    found_ve = TRUE;
 		    }
@@ -2133,7 +2133,7 @@
 			    if (mshape_names[i] == NULL)
 			    {
 				if (!VIM_ISDIGIT(*p))
-				    return N_("E547: Illegal mouseshape");
+				    return e_illegal_mouseshape;
 				if (round == 2)
 				    shape_table[idx].mshape =
 					      getdigits(&p) + MSHAPE_NUMBERED;
@@ -2173,12 +2173,12 @@
 			{
 			    p += len;
 			    if (!VIM_ISDIGIT(*p))
-				return N_("E548: digit expected");
+				return e_digit_expected;
 			    n = getdigits(&p);
 			    if (len == 3)   // "ver" or "hor"
 			    {
 				if (n == 0)
-				    return N_("E549: Illegal percentage");
+				    return e_illegal_percentage;
 				if (round == 2)
 				{
 				    if (TOLOWER_ASC(i) == 'v')
diff --git a/src/netbeans.c b/src/netbeans.c
index 5bdb868..c4223ca 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -1941,7 +1941,7 @@
 	    bg = vim_strsave(p);
 	    if (STRLEN(fg) > MAX_COLOR_LENGTH || STRLEN(bg) > MAX_COLOR_LENGTH)
 	    {
-		emsg("E532: highlighting color name too long in defineAnnoType");
+		emsg(e_highlighting_color_name_too_long_in_defineAnnoType);
 		VIM_CLEAR(typeName);
 		parse_error = TRUE;
 	    }
diff --git a/src/option.c b/src/option.c
index 59e4862..ef1908f 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1406,7 +1406,7 @@
 				  && vim_strchr((char_u *)"!&<", *arg) != NULL)
 		    errmsg = e_no_white_space_allowed_between_option_and;
 		else
-		    errmsg = N_("E518: Unknown option");
+		    errmsg = N_(e_unknown_option);
 		goto skip;
 	    }
 
@@ -1419,7 +1419,7 @@
 		    if (vim_strchr((char_u *)"=:!&<", nextchar) == NULL
 			    && (!(options[opt_idx].flags & P_BOOL)
 				|| nextchar == '?'))
-			errmsg = N_("E519: Option not supported");
+			errmsg = N_(e_option_not_supported);
 		    goto skip;
 		}
 
@@ -1457,7 +1457,7 @@
 	    {
 		if (flags & (P_SECURE | P_NO_ML))
 		{
-		    errmsg = N_("E520: Not allowed in a modeline");
+		    errmsg = N_(e_not_allowed_in_modeline);
 		    goto skip;
 		}
 		if ((flags & P_MLE) && !p_mle)
@@ -1682,13 +1682,13 @@
 			    if (i == 0 || (arg[i] != NUL
 						      && !VIM_ISWHITE(arg[i])))
 			    {
-				errmsg = N_("E521: Number required after =");
+				errmsg = N_(e_number_required_after_equal);
 				goto skip;
 			    }
 			}
 			else
 			{
-			    errmsg = N_("E521: Number required after =");
+			    errmsg = N_(e_number_required_after_equal);
 			    goto skip;
 			}
 
@@ -2140,7 +2140,7 @@
 			if (nextchar == '&')
 			{
 			    if (add_termcap_entry(key_name, TRUE) == FAIL)
-				errmsg = N_("E522: Not found in termcap");
+				errmsg = N_(e_not_found_in_termcap);
 			}
 			else
 			{
@@ -2950,7 +2950,7 @@
 		if (win->w_p_pvw && win != curwin)
 		{
 		    curwin->w_p_pvw = FALSE;
-		    return N_("E590: A preview window already exists");
+		    return N_(e_preview_window_already_exists);
 		}
 	}
     }
@@ -3680,7 +3680,7 @@
 	if (errbuf != NULL)
 	{
 	    vim_snprintf((char *)errbuf, errbuflen,
-			       _("E593: Need at least %d lines"), min_rows());
+			       _(e_need_at_least_nr_lines), min_rows());
 	    errmsg = errbuf;
 	}
 	Rows = min_rows();
@@ -3690,7 +3690,7 @@
 	if (errbuf != NULL)
 	{
 	    vim_snprintf((char *)errbuf, errbuflen,
-			    _("E594: Need at least %d columns"), MIN_COLUMNS);
+			    _(e_need_at_least_nr_columns), MIN_COLUMNS);
 	    errmsg = errbuf;
 	}
 	Columns = MIN_COLUMNS;
@@ -4385,7 +4385,7 @@
 			// There's another character after zeros or the string
 			// is empty.  In both cases, we are trying to set a
 			// num option using a string.
-			semsg(_("E521: Number required: &%s = '%s'"),
+			semsg(_(e_number_required_after_str_equal_str),
 								name, string);
 			return NULL;     // do nothing as we hit an error
 
diff --git a/src/optionstr.c b/src/optionstr.c
index fa23a9c..f555bee 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -193,8 +193,7 @@
 {
     if (errbuf == NULL)
 	return "";
-    sprintf((char *)errbuf, _("E539: Illegal character <%s>"),
-							(char *)transchar(c));
+    sprintf((char *)errbuf, _(e_illegal_character_str), (char *)transchar(c));
     return errbuf;
 }
 
@@ -629,11 +628,11 @@
 	    while ((*s != '}' || (reevaluate && s[-1] != '%')) && *s)
 		s++;
 	    if (*s != '}')
-		return N_("E540: Unclosed expression sequence");
+		return N_(e_unclosed_expression_sequence);
 	}
     }
     if (groupdepth != 0)
-	return N_("E542: unbalanced groups");
+	return N_(e_unbalanced_groups);
     return NULL;
 }
 #endif
@@ -693,15 +692,15 @@
     else if (varp == &T_NAME)
     {
 	if (T_NAME[0] == NUL)
-	    errmsg = N_("E529: Cannot set 'term' to empty string");
+	    errmsg = e_cannot_set_term_to_empty_string;
 #ifdef FEAT_GUI
 	else if (gui.in_use)
-	    errmsg = N_("E530: Cannot change term in GUI");
+	    errmsg = e_cannot_change_term_in_GUI;
 	else if (term_is_gui(T_NAME))
-	    errmsg = N_("E531: Use \":gui\" to start the GUI");
+	    errmsg = e_use_gui_to_start_GUI;
 #endif
 	else if (set_termname(T_NAME) == FAIL)
-	    errmsg = N_("E522: Not found in termcap");
+	    errmsg = e_not_found_in_termcap;
 	else
 	{
 	    // Screen colors may have changed.
@@ -749,7 +748,7 @@
     {
 	if (STRCMP(*p_bex == '.' ? p_bex + 1 : p_bex,
 		     *p_pm == '.' ? p_pm + 1 : p_pm) == 0)
-	    errmsg = N_("E589: 'backupext' and 'patchmode' are equal");
+	    errmsg = N_(e_backupext_and_patchmode_are_equal);
     }
 #ifdef FEAT_LINEBREAK
     // 'breakindentopt'
@@ -1296,9 +1295,9 @@
 		++s;
 	    }
 	    if (*s++ == NUL)
-		errmsg = N_("E524: Missing colon");
+		errmsg = e_missing_colon;
 	    else if (*s == ',' || *s == NUL)
-		errmsg = N_("E525: Zero length string");
+		errmsg = e_zero_length_string;
 	    if (errmsg != NULL)
 		break;
 	    while (*s && *s != ',')
@@ -1395,7 +1394,8 @@
 		{
 		    if (errbuf != NULL)
 		    {
-			sprintf(errbuf, _("E526: Missing number after <%s>"),
+			sprintf(errbuf,
+				_(e_missing_number_after_angle_str_angle),
 						    transchar_byte(*(s - 1)));
 			errmsg = errbuf;
 		    }
@@ -1409,14 +1409,14 @@
 	    else if (*s)
 	    {
 		if (errbuf != NULL)
-		    errmsg = N_("E527: Missing comma");
+		    errmsg = e_missing_comma;
 		else
 		    errmsg = "";
 		break;
 	    }
 	}
 	if (*p_viminfo && errmsg == NULL && get_viminfo_parameter('\'') < 0)
-	    errmsg = N_("E528: Must specify a ' value");
+	    errmsg = e_must_specify_a_value;
     }
 #endif // FEAT_VIMINFO
 
@@ -1487,7 +1487,7 @@
 	for (s = *varp; *s; )
 	{
 	    if (ptr2cells(s) != 1)
-		errmsg = N_("E595: 'showbreak' contains unprintable or wide character");
+		errmsg = N_(e_showbreak_contains_unprintable_or_wide_character);
 	    MB_PTR_ADV(s);
 	}
     }
@@ -1529,7 +1529,7 @@
 		}
 		else
 # endif
-		    errmsg = N_("E596: Invalid font(s)");
+		    errmsg = N_(e_invalid_fonts);
 	    }
 	}
 	redraw_gui_only = TRUE;
@@ -1538,18 +1538,18 @@
     else if (varp == &p_guifontset)
     {
 	if (STRCMP(p_guifontset, "*") == 0)
-	    errmsg = N_("E597: can't select fontset");
+	    errmsg = N_(e_cant_select_fontset);
 	else if (gui.in_use && gui_init_font(p_guifontset, TRUE) != OK)
-	    errmsg = N_("E598: Invalid fontset");
+	    errmsg = N_(e_invalid_fontset);
 	redraw_gui_only = TRUE;
     }
 # endif
     else if (varp == &p_guifontwide)
     {
 	if (STRCMP(p_guifontwide, "*") == 0)
-	    errmsg = N_("E533: can't select wide font");
+	    errmsg = e_cant_select_wide_font;
 	else if (gui_get_wide_font() == FAIL)
-	    errmsg = N_("E534: Invalid wide font");
+	    errmsg = e_invalid_wide_font;
 	redraw_gui_only = TRUE;
     }
 #endif
@@ -1860,8 +1860,7 @@
 		    if (errbuf != NULL)
 		    {
 			sprintf((char *)errbuf,
-				     _("E535: Illegal character after <%c>"),
-				     *--s);
+				       _(e_illegal_character_after_chr), *--s);
 			errmsg = errbuf;
 		    }
 		    else
@@ -2031,7 +2030,7 @@
     {
 	p = vim_strchr(*varp, ',');
 	if (p == NULL)
-	    errmsg = N_("E536: comma required");
+	    errmsg = e_comma_required;
 	else if (p == *varp || p[1] == NUL)
 	    errmsg = e_invalid_argument;
 	else if (foldmethodIsMarker(curwin))
@@ -2041,7 +2040,7 @@
     else if (gvarp == &p_cms)
     {
 	if (**varp != NUL && strstr((char *)*varp, "%s") == NULL)
-	    errmsg = N_("E537: 'commentstring' must be empty or contain %s");
+	    errmsg = e_commentstring_must_be_empty_or_contain_str;
     }
     // 'foldopen'
     else if (varp == &p_fdo)
diff --git a/src/quickfix.c b/src/quickfix.c
index 101240a..c2747b7 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -187,7 +187,6 @@
 static void	wipe_dummy_buffer(buf_T *buf, char_u *dirname_start);
 static void	unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
 static qf_info_T *ll_get_or_alloc_list(win_T *);
-static char_u	*e_no_more_items = (char_u *)N_("E553: No more items");
 
 // Quickfix window check helper macro
 #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL)
@@ -2733,7 +2732,7 @@
     int			qf_idx = qfl->qf_index;
     qfline_T		*prev_qf_ptr;
     int			prev_index;
-    char_u		*err = e_no_more_items;
+    char		*err = e_no_more_items;
 
     while (errornr--)
     {
diff --git a/src/regexp.c b/src/regexp.c
index fdcd6d1..a30ff8b 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1050,7 +1050,7 @@
     if (*regparse == '\\')
 	regparse++;	// Allow either \{...} or \{...\}
     if (*regparse != '}')
-	EMSG2_RET_FAIL(_("E554: Syntax error in %s{...}"),
+	EMSG2_RET_FAIL(_(e_syntax_error_in_str_curlies),
 						       reg_magic == MAGIC_ALL);
 
     /*
diff --git a/src/tag.c b/src/tag.c
index b2d610a..5e890e4 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -84,8 +84,6 @@
 #endif
 static void tagstack_clear_entry(taggy_T *item);
 
-static char_u *bottommsg = (char_u *)N_("E555: at bottom of tag stack");
-static char_u *topmsg = (char_u *)N_("E556: at top of tag stack");
 #ifdef FEAT_EVAL
 static char_u *recurmsg = (char_u *)N_("E986: cannot modify the tag stack within tagfunc");
 static char_u *tfu_inv_ret_msg = (char_u *)N_("E987: invalid return value from tagfunc");
@@ -377,7 +375,7 @@
 #endif
 		if ((tagstackidx -= count) < 0)
 		{
-		    emsg(_(bottommsg));
+		    emsg(_(e_at_bottom_of_tag_stack));
 		    if (tagstackidx + count == 0)
 		    {
 			// We did [num]^T from the bottom of the stack
@@ -390,7 +388,7 @@
 		}
 		else if (tagstackidx >= tagstacklen)    // count == 0?
 		{
-		    emsg(_(topmsg));
+		    emsg(_(e_at_top_of_tag_stack));
 		    goto end_do_tag;
 		}
 
@@ -461,12 +459,12 @@
 			 * position.
 			 */
 			tagstackidx = tagstacklen - 1;
-			emsg(_(topmsg));
+			emsg(_(e_at_top_of_tag_stack));
 			save_pos = FALSE;
 		    }
 		    else if (tagstackidx < 0)	// must have been count == 0
 		    {
-			emsg(_(bottommsg));
+			emsg(_(e_at_bottom_of_tag_stack));
 			tagstackidx = 0;
 			goto end_do_tag;
 		    }
diff --git a/src/term.c b/src/term.c
index b3df1b3..85f6229 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2222,13 +2222,13 @@
 
 	if (i < 0)
 # ifdef TGETENT_ZERO_ERR
-	    return _("E557: Cannot open termcap file");
+	    return _(e_cannot_open_termcap_file);
 	if (i == 0)
 # endif
 #ifdef TERMINFO
-	    return _("E558: Terminal entry not found in terminfo");
+	    return _(e_terminal_entry_not_found_in_terminfo);
 #else
-	    return _("E559: Terminal entry not found in termcap");
+	    return _(e_terminal_entry_not_found_in_termcap);
 #endif
     }
     return NULL;
diff --git a/src/version.c b/src/version.c
index 528ae1c..3403fda 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3987,
+/**/
     3986,
 /**/
     3985,
diff --git a/src/viminfo.c b/src/viminfo.c
index 5ce1ff3..9cf1526 100644
--- a/src/viminfo.c
+++ b/src/viminfo.c
@@ -1611,7 +1611,7 @@
 
     if (!ASCII_ISALNUM(*str) && *str != '-')
     {
-	if (viminfo_error("E577: ", _("Illegal register name"), virp->vir_line))
+	if (viminfo_error("E577: ", _(e_illegal_register_name), virp->vir_line))
 	    return TRUE;	// too many errors, pretend end-of-file
 	do_it = FALSE;
     }
@@ -1891,7 +1891,7 @@
 		type = (char_u *)"BLOCK";
 		break;
 	    default:
-		semsg(_("E574: Unknown register type %d"), y_ptr->y_type);
+		semsg(_(e_unknown_register_type_nr), y_ptr->y_type);
 		type = (char_u *)"LINE";
 		break;
 	}
@@ -2272,7 +2272,7 @@
 	{
 	    if (line[0] != '\n' && line[0] != '\r' && line[0] != '#')
 	    {
-		if (viminfo_error("E576: ", _("Missing '>'"), line))
+		if (viminfo_error("E576: ", _(e_nonr_missing_gt), line))
 		    break;	// too many errors, return now
 	    }
 	    eof = vim_fgets(line, LSIZE, virp->vir_fd);
@@ -2876,7 +2876,7 @@
 		    eof = viminfo_readline(virp);
 		break;
 	    default:
-		if (viminfo_error("E575: ", _("Illegal starting char"),
+		if (viminfo_error("E575: ", _(e_illegal_starting_char),
 			    virp->vir_line))
 		    eof = TRUE;
 		else
