diff --git a/src/buffer.c b/src/buffer.c
index 60aa32f..25efea1 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1942,7 +1942,7 @@
 	emsg(_("E948: Job still running (add ! to end the job)"));
     else
 #endif
-	emsg(_("E37: No write since last change (add ! to override)"));
+	emsg(_(e_no_write_since_last_change_add_bang_to_override));
 }
 
     void
@@ -1953,7 +1953,7 @@
 	emsg(_("E948: Job still running"));
     else
 #endif
-	emsg(_("E37: No write since last change"));
+	emsg(_(e_no_write_since_last_change));
 }
 
 /*
diff --git a/src/debugger.c b/src/debugger.c
index 52a0490..1b01998 100644
--- a/src/debugger.c
+++ b/src/debugger.c
@@ -562,7 +562,7 @@
     {
 	if (curbuf->b_ffname == NULL)
 	{
-	    emsg(_(e_noname));
+	    emsg(_(e_no_file_name));
 	    return FAIL;
 	}
 	bp->dbg_type = DBG_FILE;
diff --git a/src/digraph.c b/src/digraph.c
index 9b1836e..b354f2d 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -2074,7 +2074,7 @@
 	str = skipwhite(str);
 	if (!VIM_ISDIGIT(*str))
 	{
-	    emsg(_(e_number_exp));
+	    emsg(_(e_number_expected));
 	    return;
 	}
 	n = getdigits(&str);
@@ -2571,7 +2571,7 @@
 	buflen = STRLEN(curbuf->b_p_keymap) + STRLEN(p_enc) + 14;
 	buf = alloc(buflen);
 	if (buf == NULL)
-	    return e_outofmem;
+	    return e_out_of_memory;
 
 	// try finding "keymap/'keymap'_'encoding'.vim"  in 'runtimepath'
 	vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim",
diff --git a/src/edit.c b/src/edit.c
index d944080..5280a82 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -2874,7 +2874,7 @@
     ptr = get_last_insert();
     if (ptr == NULL)
     {
-	emsg(_(e_noinstext));
+	emsg(_(e_no_inserted_text_yet));
 	return FAIL;
     }
 
diff --git a/src/errors.h b/src/errors.h
index c5f8530..6a6829c 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -48,7 +48,63 @@
 	INIT(= N_("E23: No alternate file"));
 EXTERN char e_no_such_abbreviation[]
 	INIT(= N_("E24: No such abbreviation"));
+#if !defined(FEAT_GUI) || defined(VIMDLL)
+EXTERN char e_gui_cannot_be_used_not_enabled_at_compile_time[]
+	INIT(= N_("E25: GUI cannot be used: Not enabled at compile time"));
+#endif
+#ifndef FEAT_RIGHTLEFT
+EXTERN char e_hebrew_cannot_be_used_not_enabled_at_compile_time[]
+	INIT(= N_("E26: Hebrew cannot be used: Not enabled at compile time\n"));
+#endif
+EXTERN char e_farsi_support_has_been_removed[]
+	INIT(= N_("E27: Farsi support has been removed\n"));
 #ifdef FEAT_EVAL
+#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_SYN_HL)
+EXTERN char e_no_such_highlight_group_name_str[]
+	INIT(= N_("E28: No such highlight group name: %s"));
+#endif
+EXTERN char e_no_inserted_text_yet[]
+	INIT(= N_("E29: No inserted text yet"));
+EXTERN char e_no_previous_command_line[]
+	INIT(= N_("E30: No previous command line"));
+EXTERN char e_no_such_mapping[]
+	INIT(= N_("E31: No such mapping"));
+EXTERN char e_no_file_name[]
+	INIT(= N_("E32: No file name"));
+EXTERN char e_no_previous_substitute_regular_expression[]
+	INIT(= N_("E33: No previous substitute regular expression"));
+EXTERN char e_no_previous_command[]
+	INIT(= N_("E34: No previous command"));
+EXTERN char e_no_previous_regular_expression[]
+	INIT(= N_("E35: No previous regular expression"));
+EXTERN char e_not_enough_room[]
+	INIT(= N_("E36: Not enough room"));
+EXTERN char e_no_write_since_last_change[]
+	INIT(= N_("E37: No write since last change"));
+EXTERN char e_no_write_since_last_change_add_bang_to_override[]
+	INIT(= N_("E37: No write since last change (add ! to override)"));
+EXTERN char e_null_argument[]
+	INIT(= N_("E38: Null argument"));
+#if defined(FEAT_DIGRAPHS) || defined(FEAT_TIMERS) || defined(FEAT_EVAL)
+EXTERN char e_number_expected[]
+	INIT(= N_("E39: Number expected"));
+#endif
+#ifdef FEAT_QUICKFIX
+EXTERN char e_cant_open_errorfile_str[]
+	INIT(= N_("E40: Can't open errorfile %s"));
+#endif
+EXTERN char e_out_of_memory[]
+	INIT(= N_("E41: Out of memory!"));
+#ifdef FEAT_QUICKFIX
+EXTERN char e_no_errors[]
+	INIT(= N_("E42: No Errors"));
+#endif
+EXTERN char e_damaged_match_string[]
+	INIT(= N_("E43: Damaged match string"));
+EXTERN char e_corrupted_regexp_program[]
+	INIT(= N_("E44: Corrupted regexp program"));
+EXTERN char e_readonly_option_is_set_add_bang_to_override[]
+	INIT(= N_("E45: 'readonly' option is set (add ! to override)"));
 EXTERN char e_undefined_variable_str[]
 	INIT(= N_("E121: Undefined variable: %s"));
 EXTERN char e_undefined_variable_char_str[]
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 7e0bd64..513306b 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -466,7 +466,7 @@
 	    {
 		if (last_search_pat() == NULL)
 		{
-		    emsg(_(e_noprevre));
+		    emsg(_(e_no_previous_regular_expression));
 		    goto sortend;
 		}
 		regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
@@ -935,7 +935,7 @@
 	{
 	    if (prevcmd == NULL)
 	    {
-		emsg(_(e_noprev));
+		emsg(_(e_no_previous_command));
 		vim_free(newcmd);
 		return;
 	    }
@@ -2356,7 +2356,7 @@
 	else
 #endif
 	if (buf->b_p_ro)
-	    emsg(_(e_readonly));
+	    emsg(_(e_readonly_option_is_set_add_bang_to_override));
 	else
 	    semsg(_("E505: \"%s\" is read-only (add ! to override)"),
 		    buf->b_fname);
@@ -3763,7 +3763,7 @@
 	    {
 		if (old_sub == NULL)	// there is no previous command
 		{
-		    emsg(_(e_nopresub));
+		    emsg(_(e_no_previous_substitute_regular_expression));
 		    return;
 		}
 		sub = old_sub;
@@ -3779,7 +3779,7 @@
     {
 	if (old_sub == NULL)	// there is no previous command
 	{
-	    emsg(_(e_nopresub));
+	    emsg(_(e_no_previous_substitute_regular_expression));
 	    return;
 	}
 	pat = NULL;		// search_regcomp() will use previous pattern
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 04859ad..15560d8 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -413,7 +413,7 @@
 {
     if (curbuf->b_ffname == NULL)
     {
-	emsg(_(e_noname));
+	emsg(_(e_no_file_name));
 	return FAIL;
     }
     return OK;
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 0273f89..1efefb1 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -919,7 +919,7 @@
 	    next_cmdline = vim_strsave(next_cmdline);
 	    if (next_cmdline == NULL)
 	    {
-		emsg(_(e_outofmem));
+		emsg(_(e_out_of_memory));
 		retval = FAIL;
 		break;
 	    }
@@ -6959,7 +6959,7 @@
     static void
 ex_nogui(exarg_T *eap)
 {
-    eap->errmsg = _(e_nogvim);
+    eap->errmsg = _(e_gui_cannot_be_used_not_enabled_at_compile_time);
 }
 #endif
 
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 08ba858..6491955 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -255,7 +255,7 @@
 	    if (elem == NULL)
 	    {
 		suppress_errthrow = TRUE;
-		emsg(_(e_outofmem));
+		emsg(_(e_out_of_memory));
 	    }
 	    else
 	    {
@@ -264,7 +264,7 @@
 		{
 		    vim_free(elem);
 		    suppress_errthrow = TRUE;
-		    emsg(_(e_outofmem));
+		    emsg(_(e_out_of_memory));
 		}
 		else
 		{
@@ -592,7 +592,7 @@
 nomem:
     vim_free(excp);
     suppress_errthrow = TRUE;
-    emsg(_(e_outofmem));
+    emsg(_(e_out_of_memory));
 fail:
     current_exception = NULL;
     return FAIL;
@@ -1639,7 +1639,7 @@
 
 		elem = ALLOC_ONE(struct eslist_elem);
 		if (elem == NULL)
-		    emsg(_(e_outofmem));
+		    emsg(_(e_out_of_memory));
 		else
 		{
 		    elem->saved_emsg_silent = emsg_silent;
diff --git a/src/globals.h b/src/globals.h
index 6a15708..4c75187 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1636,30 +1636,12 @@
 EXTERN char e_loadfunc[]	INIT(= N_("E448: Could not load library function %s"));
 #endif
 EXTERN char e_nobang[]	INIT(= N_("E477: No ! allowed"));
-#if !defined(FEAT_GUI) || defined(VIMDLL)
-EXTERN char e_nogvim[]	INIT(= N_("E25: GUI cannot be used: Not enabled at compile time"));
-#endif
-#ifndef FEAT_RIGHTLEFT
-EXTERN char e_nohebrew[]	INIT(= N_("E26: Hebrew cannot be used: Not enabled at compile time\n"));
-#endif
-EXTERN char e_nofarsi[]		INIT(= N_("E27: Farsi support has been removed\n"));
 #ifndef FEAT_ARABIC
 EXTERN char e_noarabic[]	INIT(= N_("E800: Arabic cannot be used: Not enabled at compile time\n"));
 #endif
-#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_SYN_HL)
-EXTERN char e_nogroup[]	INIT(= N_("E28: No such highlight group name: %s"));
-#endif
-EXTERN char e_noinstext[]	INIT(= N_("E29: No inserted text yet"));
-EXTERN char e_nolastcmd[]	INIT(= N_("E30: No previous command line"));
-EXTERN char e_nomap[]		INIT(= N_("E31: No such mapping"));
 EXTERN char e_nomatch[]	INIT(= N_("E479: No match"));
 EXTERN char e_nomatch2[]	INIT(= N_("E480: No match: %s"));
-EXTERN char e_noname[]	INIT(= N_("E32: No file name"));
-EXTERN char e_nopresub[]	INIT(= N_("E33: No previous substitute regular expression"));
-EXTERN char e_noprev[]	INIT(= N_("E34: No previous command"));
-EXTERN char e_noprevre[]	INIT(= N_("E35: No previous regular expression"));
 EXTERN char e_norange[]	INIT(= N_("E481: No range allowed"));
-EXTERN char e_noroom[]	INIT(= N_("E36: Not enough room"));
 #ifdef FEAT_CLIENTSERVER
 EXTERN char e_noserver[]	INIT(= N_("E247: no registered server named \"%s\""));
 #endif
@@ -1667,17 +1649,9 @@
 EXTERN char e_notmp[]		INIT(= N_("E483: Can't get temp file name"));
 EXTERN char e_notopen[]		INIT(= N_("E484: Can't open file %s"));
 EXTERN char e_notread[]		INIT(= N_("E485: Can't read file %s"));
-EXTERN char e_null[]		INIT(= N_("E38: Null argument"));
-#if defined(FEAT_DIGRAPHS) || defined(FEAT_TIMERS) || defined(FEAT_EVAL)
-EXTERN char e_number_exp[]	INIT(= N_("E39: Number expected"));
-#endif
-#ifdef FEAT_QUICKFIX
-EXTERN char e_openerrf[]	INIT(= N_("E40: Can't open errorfile %s"));
-#endif
 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
 EXTERN char e_opendisp[]	INIT(= N_("E233: cannot open display"));
 #endif
-EXTERN char e_outofmem[]	INIT(= N_("E41: Out of memory!"));
 EXTERN char e_patnotf[]		INIT(= N_("Pattern not found"));
 EXTERN char e_patnotf2[]	INIT(= N_("E486: Pattern not found: %s"));
 EXTERN char e_positive[]	INIT(= N_("E487: Argument must be positive"));
@@ -1686,12 +1660,8 @@
 #endif
 
 #ifdef FEAT_QUICKFIX
-EXTERN char e_quickfix[]	INIT(= N_("E42: No Errors"));
 EXTERN char e_loclist[]		INIT(= N_("E776: No location list"));
 #endif
-EXTERN char e_re_damg[]		INIT(= N_("E43: Damaged match string"));
-EXTERN char e_re_corr[]		INIT(= N_("E44: Corrupted regexp program"));
-EXTERN char e_readonly[]	INIT(= N_("E45: 'readonly' option is set (add ! to override)"));
 #ifdef FEAT_EVAL
 EXTERN char e_letwrong[]	INIT(= N_("E734: Wrong variable type for %s="));
 EXTERN char e_illvar[]		INIT(= N_("E461: Illegal variable name: %s"));
diff --git a/src/gui.c b/src/gui.c
index c748fae..687e9da 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -5038,7 +5038,7 @@
 #if defined(VIMDLL) && !defined(EXPERIMENTAL_GUI_CMD)
 	if (!gui.starting)
 	{
-	    emsg(_(e_nogvim));
+	    emsg(_(e_gui_cannot_be_used_not_enabled_at_compile_time));
 	    return;
 	}
 #endif
diff --git a/src/list.c b/src/list.c
index 4b9236a..55b9fa0 100644
--- a/src/list.c
+++ b/src/list.c
@@ -3049,7 +3049,7 @@
 	}
 	else if (argvars[2].v_type != VAR_NUMBER)
 	{
-	    emsg(_(e_number_exp));
+	    emsg(_(e_number_expected));
 	    return;
 	}
 	else
diff --git a/src/main.c b/src/main.c
index d418c13..450fc12 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2133,7 +2133,7 @@
 		break;
 
 	    case 'F':		// "-F" was for Farsi mode
-		mch_errmsg(_(e_nofarsi));
+		mch_errmsg(_(e_farsi_support_has_been_removed));
 		mch_exit(2);
 		break;
 
@@ -2151,7 +2151,7 @@
 		p_hkmap = TRUE;
 		set_option_value((char_u *)"rl", 1L, NULL, 0);
 #else
-		mch_errmsg(_(e_nohebrew));
+		mch_errmsg(_(e_hebrew_cannot_be_used_not_enabled_at_compile_time));
 		mch_exit(2);
 #endif
 		break;
@@ -3282,7 +3282,7 @@
 #ifdef FEAT_GUI
     gui.starting = TRUE;	// start GUI a bit later
 #else
-    mch_errmsg(_(e_nogvim));
+    mch_errmsg(_(e_gui_cannot_be_used_not_enabled_at_compile_time));
     mch_errmsg("\n");
     mch_exit(2);
 #endif
diff --git a/src/map.c b/src/map.c
index 9f80ba8..09339a2 100644
--- a/src/map.c
+++ b/src/map.c
@@ -2723,7 +2723,8 @@
     {
 	case 1: emsg(_(e_invarg));
 		break;
-	case 2: emsg((isabbrev ? _(e_no_such_abbreviation) : _(e_nomap)));
+	case 2: emsg((isabbrev ? _(e_no_such_abbreviation)
+						      : _(e_no_such_mapping)));
 		break;
     }
 }
diff --git a/src/match.c b/src/match.c
index 741488a..fe1433d 100644
--- a/src/match.c
+++ b/src/match.c
@@ -64,7 +64,7 @@
     }
     if ((hlg_id = syn_namen2id(grp, (int)STRLEN(grp))) == 0)
     {
-	semsg(_(e_nogroup), grp);
+	semsg(_(e_no_such_highlight_group_name_str), grp);
 	return -1;
     }
     if (pat != NULL && (regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
diff --git a/src/quickfix.c b/src/quickfix.c
index eb1a4a8..daf27d7 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1571,7 +1571,7 @@
 
     if (efile != NULL && (pstate->fd = mch_fopen((char *)efile, "r")) == NULL)
     {
-	semsg(_(e_openerrf), efile);
+	semsg(_(e_cant_open_errorfile_str), efile);
 	return FAIL;
     }
 
@@ -3439,7 +3439,7 @@
 
     if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi)))
     {
-	emsg(_(e_quickfix));
+	emsg(_(e_no_errors));
 	return;
     }
 
@@ -3619,7 +3619,7 @@
 
     if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi)))
     {
-	emsg(_(e_quickfix));
+	emsg(_(e_no_errors));
 	return;
     }
     if (*arg == '+')
@@ -4025,7 +4025,7 @@
 
     if (qf_list_empty(qf_get_curlist(qi)))
     {
-	emsg(_(e_quickfix));
+	emsg(_(e_no_errors));
 	return;
     }
 
@@ -5668,7 +5668,7 @@
 	buf_has_flag = BUF_HAS_LL_ENTRY;
     if (!(curbuf->b_has_qf_entry & buf_has_flag))
     {
-	emsg(_(e_quickfix));
+	emsg(_(e_no_errors));
 	return;
     }
 
@@ -5679,7 +5679,7 @@
     // check if the list has valid errors
     if (!qf_list_has_valid_entries(qfl))
     {
-	emsg(_(e_quickfix));
+	emsg(_(e_no_errors));
 	return;
     }
 
@@ -5843,7 +5843,7 @@
 	// Pattern is empty, use last search pattern.
 	if (last_search_pat() == NULL)
 	{
-	    emsg(_(e_noprevre));
+	    emsg(_(e_no_previous_regular_expression));
 	    return;
 	}
 	regmatch->regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
diff --git a/src/regexp.c b/src/regexp.c
index 805056e..5a17d24 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1359,7 +1359,7 @@
 
     if (UCHARAT(((bt_regprog_T *)prog)->program) != REGMAGIC)
     {
-	emsg(_(e_re_corr));
+	emsg(_(e_corrupted_regexp_program));
 	return TRUE;
     }
     return FALSE;
@@ -1982,7 +1982,7 @@
     // Be paranoid...
     if ((source == NULL && expr == NULL) || dest == NULL)
     {
-	emsg(_(e_null));
+	emsg(_(e_null_argument));
 	return 0;
     }
     if (prog_magic_wrong())
@@ -2289,7 +2289,7 @@
 		    else if (*s == NUL) // we hit NUL.
 		    {
 			if (copy)
-			    iemsg(_(e_re_damg));
+			    iemsg(_(e_damaged_match_string));
 			goto exit;
 		    }
 		    else
diff --git a/src/regexp_bt.c b/src/regexp_bt.c
index dae6d51..1a677d1 100644
--- a/src/regexp_bt.c
+++ b/src/regexp_bt.c
@@ -1424,7 +1424,7 @@
 		}
 	    }
 	    else
-		EMSG_RET_NULL(_(e_nopresub));
+		EMSG_RET_NULL(_(e_no_previous_substitute_regular_expression));
 	    break;
 
       case Magic('1'):
@@ -2491,7 +2491,7 @@
     int		flags;
 
     if (expr == NULL)
-	IEMSG_RET_NULL(_(e_null));
+	IEMSG_RET_NULL(_(e_null_argument));
 
     init_class_tab();
 
@@ -3115,7 +3115,7 @@
 	break;
 
       default:			// Oh dear.  Called inappropriately.
-	iemsg(_(e_re_corr));
+	iemsg(_(e_corrupted_regexp_program));
 #ifdef DEBUG
 	printf("Called regrepeat with op code %d\n", OP(p));
 #endif
@@ -4309,7 +4309,7 @@
 	    break;
 
 	  default:
-	    iemsg(_(e_re_corr));
+	    iemsg(_(e_corrupted_regexp_program));
 #ifdef DEBUG
 	    printf("Illegal op code %d\n", op);
 #endif
@@ -4709,7 +4709,7 @@
 	{
 	    // We get here only if there's trouble -- normally "case END" is
 	    // the terminating point.
-	    iemsg(_(e_re_corr));
+	    iemsg(_(e_corrupted_regexp_program));
 #ifdef DEBUG
 	    printf("Premature EOL\n");
 #endif
@@ -4859,7 +4859,7 @@
     // Be paranoid...
     if (prog == NULL || line == NULL)
     {
-	iemsg(_(e_null));
+	iemsg(_(e_null_argument));
 	goto theend;
     }
 
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index db629de..dac3125 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -1527,7 +1527,7 @@
 		// Generated as "\%(pattern\)".
 		if (reg_prev_sub == NULL)
 		{
-		    emsg(_(e_nopresub));
+		    emsg(_(e_no_previous_substitute_regular_expression));
 		    return FAIL;
 		}
 		for (lp = reg_prev_sub; *lp != NUL; MB_CPTR_ADV(lp))
@@ -7356,7 +7356,7 @@
     // Be paranoid...
     if (prog == NULL || line == NULL)
     {
-	iemsg(_(e_null));
+	iemsg(_(e_null_argument));
 	goto theend;
     }
 
diff --git a/src/register.c b/src/register.c
index 93ee7aa..0c714c6 100644
--- a/src/register.c
+++ b/src/register.c
@@ -594,7 +594,7 @@
     {
 	if (last_cmdline == NULL)
 	{
-	    emsg(_(e_nolastcmd));
+	    emsg(_(e_no_previous_command_line));
 	    return FAIL;
 	}
 	// don't keep the cmdline containing @:
@@ -632,7 +632,7 @@
 	p = get_last_insert_save();
 	if (p == NULL)
 	{
-	    emsg(_(e_noinstext));
+	    emsg(_(e_no_inserted_text_yet));
 	    return FAIL;
 	}
 	retval = put_in_typebuf(p, FALSE, colon, silent);
@@ -867,13 +867,13 @@
 
 	case ':':		// last command line
 	    if (last_cmdline == NULL && errmsg)
-		emsg(_(e_nolastcmd));
+		emsg(_(e_no_previous_command_line));
 	    *argp = last_cmdline;
 	    return TRUE;
 
 	case '/':		// last search-pattern
 	    if (last_search_pat() == NULL && errmsg)
-		emsg(_(e_noprevre));
+		emsg(_(e_no_previous_regular_expression));
 	    *argp = last_search_pat();
 	    return TRUE;
 
@@ -881,7 +881,7 @@
 	    *argp = get_last_insert_save();
 	    *allocated = TRUE;
 	    if (*argp == NULL && errmsg)
-		emsg(_(e_noinstext));
+		emsg(_(e_no_inserted_text_yet));
 	    return TRUE;
 
 #ifdef FEAT_SEARCHPATH
diff --git a/src/search.c b/src/search.c
index 483265e..0034e1e 100644
--- a/src/search.c
+++ b/src/search.c
@@ -148,9 +148,9 @@
 	if (spats[i].pat == NULL)	// pattern was never defined
 	{
 	    if (pat_use == RE_SUBST)
-		emsg(_(e_nopresub));
+		emsg(_(e_no_previous_substitute_regular_expression));
 	    else
-		emsg(_(e_noprevre));
+		emsg(_(e_no_previous_regular_expression));
 	    rc_did_emsg = TRUE;
 	    return FAIL;
 	}
@@ -1323,7 +1323,7 @@
 		searchstr = spats[RE_SUBST].pat;
 		if (searchstr == NULL)
 		{
-		    emsg(_(e_noprevre));
+		    emsg(_(e_no_previous_regular_expression));
 		    retval = 0;
 		    goto end_do_search;
 		}
diff --git a/src/session.c b/src/session.c
index 8edf0da..03b57f0 100644
--- a/src/session.c
+++ b/src/session.c
@@ -977,7 +977,7 @@
 
     if (curbuf->b_ffname == NULL)
     {
-	emsg(_(e_noname));
+	emsg(_(e_no_file_name));
 	return NULL;
     }
     sname = home_replace_save(NULL, curbuf->b_ffname);
diff --git a/src/spell.c b/src/spell.c
index 0b693c7..46912ff 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -2137,7 +2137,7 @@
 		    if (ga_grow(&ga, 1) == FAIL)
 		    {
 			ga_clear(&ga);
-			ret_msg = e_outofmem;
+			ret_msg = e_out_of_memory;
 			goto theend;
 		    }
 		    LANGP_ENTRY(ga, ga.ga_len)->lp_slang = slang;
diff --git a/src/syntax.c b/src/syntax.c
index 60c35bd..fea317a 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -3723,7 +3723,7 @@
 		id = syn_namen2id(arg, (int)(arg_end - arg));
 		if (id == 0)
 		{
-		    semsg(_(e_nogroup), arg);
+		    semsg(_(e_no_such_highlight_group_name_str), arg);
 		    break;
 		}
 		else
@@ -3921,7 +3921,7 @@
 	    {
 		id = syn_namen2id(arg, (int)(arg_end - arg));
 		if (id == 0)
-		    semsg(_(e_nogroup), arg);
+		    semsg(_(e_no_such_highlight_group_name_str), arg);
 		else
 		    syn_list_one(id, syncing, TRUE);
 	    }
diff --git a/src/time.c b/src/time.c
index eeefeb6..f7f614e 100644
--- a/src/time.c
+++ b/src/time.c
@@ -757,7 +757,7 @@
     if (argvars[0].v_type != VAR_UNKNOWN)
     {
 	if (argvars[0].v_type != VAR_NUMBER)
-	    emsg(_(e_number_exp));
+	    emsg(_(e_number_expected));
 	else
 	{
 	    timer = find_timer((int)tv_get_number(&argvars[0]));
@@ -783,7 +783,7 @@
 	return;
 
     if (argvars[0].v_type != VAR_NUMBER)
-	emsg(_(e_number_exp));
+	emsg(_(e_number_expected));
     else
     {
 	int	paused = (int)tv_get_bool(&argvars[1]);
@@ -844,7 +844,7 @@
 
     if (argvars[0].v_type != VAR_NUMBER)
     {
-	emsg(_(e_number_exp));
+	emsg(_(e_number_expected));
 	return;
     }
     timer = find_timer((int)tv_get_number(&argvars[0]));
diff --git a/src/userfunc.c b/src/userfunc.c
index 79e711c..be1eaa9 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -5028,7 +5028,7 @@
 		if ((cstack->cs_rettv[idx] = alloc_tv()) != NULL)
 		    *(typval_T *)cstack->cs_rettv[idx] = *(typval_T *)rettv;
 		else
-		    emsg(_(e_outofmem));
+		    emsg(_(e_out_of_memory));
 	    }
 	    else
 		cstack->cs_rettv[idx] = NULL;
diff --git a/src/version.c b/src/version.c
index 94825c1..6802e0b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3190,
+/**/
     3189,
 /**/
     3188,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index b882c4d..73896cb 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2337,7 +2337,7 @@
 			else if (dest_type == VAR_LIST
 					       && tv_idx->v_type != VAR_NUMBER)
 			{
-			    emsg(_(e_number_exp));
+			    emsg(_(e_number_expected));
 			    status = FAIL;
 			}
 		    }
@@ -3955,7 +3955,7 @@
 			)
 		{
 		    SOURCING_LNUM = iptr->isn_lnum;
-		    emsg(_(e_number_exp));
+		    emsg(_(e_number_expected));
 		    goto on_error;
 		}
 #ifdef FEAT_FLOAT
diff --git a/src/window.c b/src/window.c
index cc9c217..8e5d3de 100644
--- a/src/window.c
+++ b/src/window.c
@@ -863,7 +863,7 @@
     {
 	if (VISIBLE_HEIGHT(oldwin) <= p_wmh && new_wp == NULL)
 	{
-	    emsg(_(e_noroom));
+	    emsg(_(e_not_enough_room));
 	    return FAIL;
 	}
 	need_status = STATUS_HEIGHT;
@@ -921,7 +921,7 @@
 	}
 	if (available < needed && new_wp == NULL)
 	{
-	    emsg(_(e_noroom));
+	    emsg(_(e_not_enough_room));
 	    return FAIL;
 	}
 	if (new_size == 0)
@@ -1004,7 +1004,7 @@
 	}
 	if (available < needed && new_wp == NULL)
 	{
-	    emsg(_(e_noroom));
+	    emsg(_(e_not_enough_room));
 	    return FAIL;
 	}
 	oldwin_height = oldwin->w_height;
@@ -5867,7 +5867,7 @@
 	--p_wmh;
 	if (first)
 	{
-	    emsg(_(e_noroom));
+	    emsg(_(e_not_enough_room));
 	    first = FALSE;
 	}
     }
@@ -5893,7 +5893,7 @@
 	--p_wmw;
 	if (first)
 	{
-	    emsg(_(e_noroom));
+	    emsg(_(e_not_enough_room));
 	    first = FALSE;
 	}
     }
@@ -6385,7 +6385,7 @@
 	    {
 		if (frp == NULL)
 		{
-		    emsg(_(e_noroom));
+		    emsg(_(e_not_enough_room));
 		    p_ch = old_p_ch;
 		    curtab->tp_ch_used = p_ch;
 		    cmdline_row = Rows - p_ch;
@@ -6476,7 +6476,7 @@
 	    {
 		if (fp == topframe)
 		{
-		    emsg(_(e_noroom));
+		    emsg(_(e_not_enough_room));
 		    return;
 		}
 		// In a column of frames: go to frame above.  If already at
