diff --git a/src/change.c b/src/change.c
index bc77fa2..9f1705f 100644
--- a/src/change.c
+++ b/src/change.c
@@ -1247,7 +1247,7 @@
     // If "count" is negative the caller must be doing something wrong.
     if (count < 1)
     {
-	siemsg("E292: Invalid count for del_bytes(): %ld", count);
+	siemsg(e_invalid_count_for_del_bytes_nr, count);
 	return FAIL;
     }
 
diff --git a/src/clientserver.c b/src/clientserver.c
index 2fefcc4..ca6a4eb 100644
--- a/src/clientserver.c
+++ b/src/clientserver.c
@@ -929,7 +929,7 @@
 		|| serverReadReply(X_DISPLAY, serverStrToWin(serverid),
 						       &r, FALSE, timeout) < 0)
 # endif
-	    emsg(_("E277: Unable to read a server reply"));
+	    emsg(_(e_unable_to_read_server_reply));
     }
 #endif
     rettv->v_type = VAR_STRING;
diff --git a/src/errors.h b/src/errors.h
index a8ad95e..2a5b85c 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -592,11 +592,117 @@
 EXTERN char e_no_matches_found_for_cscope_query_str_of_str[]
 	INIT(= N_("E259: no matches found for cscope query %s of %s"));
 #endif
-
+#ifdef FEAT_EVAL
+EXTERN char e_missing_name_after_method[]
+	INIT(= N_("E260: Missing name after ->"));
+#endif
+#ifdef FEAT_CSCOPE
+EXTERN char e_cscope_connection_str_not_founc[]
+	INIT(= N_("E261: cscope connection %s not found"));
+EXTERN char e_error_reading_cscope_connection_nr[]
+	INIT(= N_("E262: error reading cscope connection %d"));
+#endif
+#ifdef DYNAMIC_PYTHON
+EXTERN char e_sorry_this_command_is_disabled_python_library_could_not_be_found[]
+	INIT(= N_("E263: Sorry, this command is disabled, the Python library could not be loaded."));
+#endif
+#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
+EXTERN char e_python_error_initialising_io_object[]
+	INIT(= N_("E264: Python: Error initialising I/O objects"));
+#endif
+#ifdef FEAT_RUBY
+EXTERN char e_dollar_must_be_an_instance_of_string[]
+	INIT(= N_("E265: $_ must be an instance of String"));
+#endif
+#ifdef DYNAMIC_RUBY
+EXTERN char e_sorry_this_command_is_disabled_the_ruby_library_could_not_be_loaded[]
+	INIT(= N_("E266: Sorry, this command is disabled, the Ruby library could not be loaded."));
+#endif
+#ifdef FEAT_RUBY
+EXTERN char e_unexpected_return[]
+	INIT(= N_("E267: unexpected return"));
+EXTERN char e_unexpected_next[]
+	INIT(= N_("E268: unexpected next"));
+EXTERN char e_unexpected_break[]
+	INIT(= N_("E269: unexpected break"));
+EXTERN char e_unexpected_redo[]
+	INIT(= N_("E270: unexpected redo"));
+EXTERN char e_retry_outside_of_rescue_clause[]
+	INIT(= N_("E271: retry outside of rescue clause"));
+EXTERN char e_unhandled_exception[]
+	INIT(= N_("E272: unhandled exception"));
+EXTERN char e_unknown_longjmp_status_nr[]
+	INIT(= N_("E273: unknown longjmp status %d"));
+#endif
 #ifdef FEAT_EVAL
 EXTERN char e_no_white_space_allowed_before_parenthesis[]
 	INIT(= N_("E274: No white space allowed before parenthesis"));
 #endif
+#ifdef FEAT_PROP_POPUP
+EXTERN char e_cannot_add_text_property_to_unloaded_buffer[]
+	INIT(= N_("E275: Cannot add text property to unloaded buffer"));
+#endif
+#ifdef FEAT_EVAL
+EXTERN char e_cannot_use_function_as_method_str[]
+	INIT(= N_("E276: Cannot use function as a method: %s"));
+#endif
+#ifdef FEAT_CLIENTSERVER
+EXTERN char e_unable_to_read_server_reply[]
+	INIT(= N_("E277: Unable to read a server reply"));
+#endif
+#ifdef FEAT_TERMINAL
+EXTERN char e_sorry_plusplusshell_not_supported_on_this_system[]
+	INIT(= N_("E279: Sorry, ++shell is not supported on this system"));
+#endif
+#ifdef FEAT_TCL
+EXTERN char e_tcl_fatal_error_reflist_corrupt_please_report_this[]
+	INIT(= N_("E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"));
+#endif
+// E281 unused
+EXTERN char e_cannot_read_from_str_2[]
+	INIT(= N_("E282: Cannot read from \"%s\""));
+EXTERN char e_no_marks_matching_str[]
+	INIT(= N_("E283: No marks matching \"%s\""));
+#ifdef FEAT_XIM
+EXTERN char e_cannot_set_ic_values[]
+	INIT(= N_("E284: Cannot set IC values"));
+# if defined(FEAT_GUI_X11)
+EXTERN char e_failed_to_create_input_context[]
+	INIT(= N_("E285: Failed to create input context"));
+# endif
+EXTERN char e_failed_to_open_input_method[]
+	INIT(= N_("E286: Failed to open input method"));
+EXTERN char e_warning_could_not_set_destroy_callback_to_im[]
+	INIT(= N_("E287: Warning: Could not set destroy callback to IM"));
+EXTERN char e_input_method_doesnt_support_any_style[]
+	INIT(= N_("E288: input method doesn't support any style"));
+EXTERN char e_input_method_doesnt_support_my_preedit_type[]
+	INIT(= N_("E289: input method doesn't support my preedit type"));
+#endif
+#ifdef FEAT_SEARCH_EXTRA
+EXTERN char e_list_or_number_required[]
+	INIT(= N_("E290: List or number required"));
+#endif
+// E291 unused
+EXTERN char e_invalid_count_for_del_bytes_nr[]
+	INIT(= N_("E292: Invalid count for del_bytes(): %ld"));
+EXTERN char e_block_was_not_locked[]
+	INIT(= N_("E293: block was not locked"));
+EXTERN char e_seek_error_in_swap_file_read[]
+	INIT(= N_("E294: Seek error in swap file read"));
+EXTERN char e_read_error_in_swap_file[]
+	INIT(= N_("E295: Read error in swap file"));
+EXTERN char e_seek_error_in_swap_file_write[]
+	INIT(= N_("E296: Seek error in swap file write"));
+EXTERN char e_write_error_in_swap_file[]
+	INIT(= N_("E297: Write error in swap file"));
+EXTERN char e_didnt_get_block_nr_zero[]
+	INIT(= N_("E298: Didn't get block nr 0?"));
+EXTERN char e_didnt_get_block_nr_one[]
+	INIT(= N_("E298: Didn't get block nr 1?"));
+EXTERN char e_didnt_get_block_nr_two[]
+	INIT(= N_("E298: Didn't get block nr 2?"));
+// E299 unused
 
 #ifdef FEAT_MENU
 EXTERN char e_menu_only_exists_in_another_mode[]
diff --git a/src/eval.c b/src/eval.c
index f228067..99bc5a5 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3936,7 +3936,7 @@
     if (len <= 0)
     {
 	if (verbose)
-	    emsg(_("E260: Missing name after ->"));
+	    emsg(_(e_missing_name_after_method));
 	ret = FAIL;
     }
     else
diff --git a/src/gui_xim.c b/src/gui_xim.c
index 4bd1a2e..28d354c 100644
--- a/src/gui_xim.c
+++ b/src/gui_xim.c
@@ -1324,15 +1324,11 @@
 					XNLineSpace, line_space,
 					NULL);
 	if (XSetICValues(xic, XNPreeditAttributes, attr_list, NULL))
-	    emsg(_("E284: Cannot set IC values"));
+	    emsg(_(e_cannot_set_ic_values));
 	XFree(attr_list);
     }
 }
 
-#  if defined(FEAT_GUI_X11)
-static char e_xim[] = N_("E285: Failed to create input context");
-#  endif
-
 #  if defined(FEAT_GUI_X11) || defined(PROTO)
 #   if defined(XtSpecificationRelease) && XtSpecificationRelease >= 6 && !defined(SUN_SYSTEM)
 #    define USE_X11R6_XIM
@@ -1483,7 +1479,7 @@
 	if (p_verbose > 0)
 	{
 	    verbose_enter();
-	    emsg(_("E286: Failed to open input method"));
+	    emsg(_(e_failed_to_open_input_method));
 	    verbose_leave();
 	}
 	return FALSE;
@@ -1496,13 +1492,13 @@
 	destroy_cb.callback = xim_destroy_cb;
 	destroy_cb.client_data = NULL;
 	if (XSetIMValues(xim, XNDestroyCallback, &destroy_cb, NULL))
-	    emsg(_("E287: Warning: Could not set destroy callback to IM"));
+	    emsg(_(e_warning_could_not_set_destroy_callback_to_im));
     }
 #  endif
 
     if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL) || !xim_styles)
     {
-	emsg(_("E288: input method doesn't support any style"));
+	emsg(_(e_input_method_doesnt_support_any_style));
 	XCloseIM(xim);
 	return FALSE;
     }
@@ -1561,7 +1557,7 @@
 	if (p_verbose > 0)
 	{
 	    verbose_enter();
-	    emsg(_("E289: input method doesn't support my preedit type"));
+	    emsg(_(e_input_method_doesnt_support_my_preedit_type));
 	    verbose_leave();
 	}
 	XCloseIM(xim);
@@ -1625,7 +1621,7 @@
     else
     {
 	if (!is_not_a_term())
-	    emsg(_(e_xim));
+	    emsg(_(e_failed_to_create_input_context));
 	XCloseIM(xim);
 	return FALSE;
     }
diff --git a/src/if_cscope.c b/src/if_cscope.c
index 9153831..dbaa960 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -636,7 +636,7 @@
 cs_reading_emsg(
     int idx)	// connection index
 {
-    semsg(_("E262: error reading cscope connection %d"), idx);
+    semsg(_(e_error_reading_cscope_connection_nr), idx);
 }
 
 #define	CSREAD_BUFSIZE	2048
@@ -1497,7 +1497,7 @@
     if ((i != -1) && (i >= csinfo_size || i < -1 || csinfo[i].fname == NULL))
     {
 	if (p_csverbose)
-	    (void)semsg(_("E261: cscope connection %s not found"), stok);
+	    (void)semsg(_(e_cscope_connection_str_not_founc), stok);
     }
     else
     {
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 6d71ac1..b8716fa 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -538,7 +538,7 @@
 
     if (PyErr_Occurred())
     {
-	emsg(_("E264: Python: Error initialising I/O objects"));
+	emsg(_(e_python_error_initialising_io_object));
 	return -1;
     }
 
diff --git a/src/if_python.c b/src/if_python.c
index 22c2f0c..7cc9aa7 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -919,7 +919,7 @@
 #ifdef DYNAMIC_PYTHON
 	if (!python_enabled(TRUE))
 	{
-	    emsg(_("E263: Sorry, this command is disabled, the Python library could not be loaded."));
+	    emsg(_(e_sorry_this_command_is_disabled_python_library_could_not_be_found));
 	    goto fail;
 	}
 #endif
diff --git a/src/if_python3.c b/src/if_python3.c
index 938ab8d..3bf387a 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -1071,7 +1071,7 @@
 #ifdef DYNAMIC_PYTHON3
 	if (!python3_enabled(TRUE))
 	{
-	    emsg(_("E263: Sorry, this command is disabled, the Python library could not be loaded."));
+	    emsg(_(e_sorry_this_command_is_disabled_python_library_could_not_be_found));
 	    goto fail;
 	}
 #endif
diff --git a/src/if_ruby.c b/src/if_ruby.c
index ef332ee..fcbbf33 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -978,7 +978,7 @@
 	    {
 		if (TYPE(line) != T_STRING)
 		{
-		    emsg(_("E265: $_ must be an instance of String"));
+		    emsg(_(e_dollar_must_be_an_instance_of_string));
 		    return;
 		}
 		ml_replace(i, (char_u *) StringValuePtr(line), 1);
@@ -1077,7 +1077,7 @@
 	}
 	else
 	{
-	    emsg(_("E266: Sorry, this command is disabled, the Ruby library could not be loaded."));
+	    emsg(_(e_sorry_this_command_is_disabled_the_ruby_library_could_not_be_loaded));
 	    return 0;
 	}
 #endif
@@ -1112,19 +1112,19 @@
     switch (state)
     {
 	case TAG_RETURN:
-	    emsg(_("E267: unexpected return"));
+	    emsg(_(e_unexpected_return));
 	    break;
 	case TAG_NEXT:
-	    emsg(_("E268: unexpected next"));
+	    emsg(_(e_unexpected_next));
 	    break;
 	case TAG_BREAK:
-	    emsg(_("E269: unexpected break"));
+	    emsg(_(e_unexpected_break));
 	    break;
 	case TAG_REDO:
-	    emsg(_("E270: unexpected redo"));
+	    emsg(_(e_unexpected_redo));
 	    break;
 	case TAG_RETRY:
-	    emsg(_("E271: retry outside of rescue clause"));
+	    emsg(_(e_retry_outside_of_rescue_clause));
 	    break;
 	case TAG_RAISE:
 	case TAG_FATAL:
@@ -1137,7 +1137,7 @@
 	    einfo = rb_obj_as_string(error);
 	    if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0)
 	    {
-		emsg(_("E272: unhandled exception"));
+		emsg(_(e_unhandled_exception));
 	    }
 	    else
 	    {
@@ -1164,7 +1164,7 @@
 #endif
 	    break;
 	default:
-	    vim_snprintf(buff, BUFSIZ, _("E273: unknown longjmp status %d"), state);
+	    vim_snprintf(buff, BUFSIZ, _(e_unknown_longjmp_status_nr), state);
 	    emsg(buff);
 	    break;
     }
diff --git a/src/if_tcl.c b/src/if_tcl.c
index cc48c8e..65f25c1 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -1541,7 +1541,7 @@
 	reflist = reflist->next;
     }
     // This should never happen.  Famous last word?
-    iemsg(_("E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"));
+    iemsg(_(e_tcl_fatal_error_reflist_corrupt_please_report_this));
     Tcl_SetResult(interp, _("cannot register callback command: buffer/window reference not found"), TCL_STATIC);
     return TCL_ERROR;
 }
diff --git a/src/main.c b/src/main.c
index 01dd504..dc82a8a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -3141,7 +3141,7 @@
 	else
 	{
 	    if (do_source(parmp->use_vimrc, FALSE, DOSO_NONE, NULL) != OK)
-		semsg(_("E282: Cannot read from \"%s\""), parmp->use_vimrc);
+		semsg(_(e_cannot_read_from_str_2), parmp->use_vimrc);
 	}
     }
     else if (!silent_mode)
diff --git a/src/mark.c b/src/mark.c
index dc9bece..771eb1b 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -732,7 +732,7 @@
 	    if (arg == NULL)
 		msg(_("No marks set"));
 	    else
-		semsg(_("E283: No marks matching \"%s\""), arg);
+		semsg(_(e_no_marks_matching_str), arg);
 	}
     }
     // don't output anything if 'q' typed at --more-- prompt
diff --git a/src/match.c b/src/match.c
index 082c079..8b175f3 100644
--- a/src/match.c
+++ b/src/match.c
@@ -165,7 +165,7 @@
 	    }
 	    else
 	    {
-		emsg(_("E290: List or number required"));
+		emsg(_(e_list_or_number_required));
 		goto fail;
 	    }
 	    if (toplnum == 0 || lnum < toplnum)
diff --git a/src/memfile.c b/src/memfile.c
index fbffdbe..4e8decb 100644
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -477,7 +477,7 @@
     flags = hp->bh_flags;
 
     if ((flags & BH_LOCKED) == 0)
-	iemsg(_("E293: block was not locked"));
+	iemsg(_(e_block_was_not_locked));
     flags &= ~BH_LOCKED;
     if (dirty)
     {
@@ -945,12 +945,12 @@
     size = page_size * hp->bh_page_count;
     if (vim_lseek(mfp->mf_fd, offset, SEEK_SET) != offset)
     {
-	PERROR(_("E294: Seek error in swap file read"));
+	PERROR(_(e_seek_error_in_swap_file_read));
 	return FAIL;
     }
     if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
     {
-	PERROR(_("E295: Read error in swap file"));
+	PERROR(_(e_read_error_in_swap_file));
 	return FAIL;
     }
 
@@ -1021,7 +1021,7 @@
 	    {
 		if (vim_lseek(mfp->mf_fd, offset, SEEK_SET) != offset)
 		{
-		    PERROR(_("E296: Seek error in swap file write"));
+		    PERROR(_(e_seek_error_in_swap_file_write));
 		    return FAIL;
 		}
 		if (mf_write_block(mfp,
@@ -1046,7 +1046,7 @@
 		// successful write or when hitting a key. We keep on trying,
 		// in case some space becomes available.
 		if (!did_swapwrite_msg)
-		    emsg(_("E297: Write error in swap file"));
+		    emsg(_(e_write_error_in_swap_file));
 		did_swapwrite_msg = TRUE;
 		return FAIL;
 	    }
diff --git a/src/memline.c b/src/memline.c
index a072746..a4485c8 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -327,7 +327,7 @@
 	goto error;
     if (hp->bh_bnum != 0)
     {
-	iemsg(_("E298: Didn't get block nr 0?"));
+	iemsg(_(e_didnt_get_block_nr_zero));
 	goto error;
     }
     b0p = (ZERO_BL *)(hp->bh_data);
@@ -377,7 +377,7 @@
 	goto error;
     if (hp->bh_bnum != 1)
     {
-	iemsg(_("E298: Didn't get block nr 1?"));
+	iemsg(_(e_didnt_get_block_nr_one));
 	goto error;
     }
     pp = (PTR_BL *)(hp->bh_data);
@@ -395,7 +395,7 @@
 	goto error;
     if (hp->bh_bnum != 2)
     {
-	iemsg(_("E298: Didn't get block nr 2?"));
+	iemsg(_(e_didnt_get_block_nr_two));
 	goto error;
     }
 
diff --git a/src/terminal.c b/src/terminal.c
index ca5b835..d974c11 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -935,7 +935,7 @@
 	vim_snprintf((char *)newcmd, cmdlen, "%s %s %s", p_sh, p_shcf, cmd);
 	cmd = newcmd;
 # else
-	emsg(_("E279: Sorry, ++shell is not supported on this system"));
+	emsg(_(e_sorry_plusplusshell_not_supported_on_this_system));
 	goto theend;
 # endif
 #endif
diff --git a/src/textprop.c b/src/textprop.c
index 4c17a4a..c28d4e4 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -222,7 +222,7 @@
 
     if (buf->b_ml.ml_mfp == NULL)
     {
-	emsg(_("E275: Cannot add text property to unloaded buffer"));
+	emsg(_(e_cannot_add_text_property_to_unloaded_buffer));
 	return FAIL;
     }
 
diff --git a/src/userfunc.c b/src/userfunc.c
index eb2ee1c..dac7df8 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3268,7 +3268,7 @@
 		break;
 	case FCERR_NOTMETHOD:
 		emsg_funcname(
-			N_("E276: Cannot use function as a method: %s"), name);
+			N_(e_cannot_use_function_as_method_str), name);
 		break;
 	case FCERR_DELETED:
 		emsg_funcname(e_function_was_deleted_str, name);
diff --git a/src/version.c b/src/version.c
index 44af312..0e341f9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3977,
+/**/
     3976,
 /**/
     3975,
