diff --git a/src/autocmd.c b/src/autocmd.c
index 9b6a5d0..81f2a7e 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -687,7 +687,7 @@
     {
 	if (arg[1] && !VIM_ISWHITE(arg[1]))
 	{
-	    semsg(_("E215: Illegal character after *: %s"), arg);
+	    semsg(_(e_illegal_character_after_star_str), arg);
 	    return NULL;
 	}
 	pat = arg + 1;
@@ -699,9 +699,9 @@
 	    if ((int)event_name2nr(pat, &p) >= NUM_EVENTS)
 	    {
 		if (have_group)
-		    semsg(_("E216: No such event: %s"), pat);
+		    semsg(_(e_no_such_event_str), pat);
 		else
-		    semsg(_("E216: No such group or event: %s"), pat);
+		    semsg(_(e_no_such_group_or_event_str), pat);
 		return NULL;
 	    }
 	}
@@ -1329,7 +1329,7 @@
 
     if (*arg == '*')
     {
-	emsg(_("E217: Can't execute autocommands for ALL events"));
+	emsg(_(e_cant_execute_autocommands_for_all_events));
 	return FAIL;
     }
 
@@ -1942,7 +1942,7 @@
      */
     if (nesting == 10)
     {
-	emsg(_("E218: autocommand nesting too deep"));
+	emsg(_(e_autocommand_nesting_too_deep));
 	goto BYPASS_AU;
     }
 
diff --git a/src/bufwrite.c b/src/bufwrite.c
index 8ffc7e0..dfc2995 100644
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -932,7 +932,7 @@
 #ifdef FEAT_EVAL
 	    if (!aborting())
 #endif
-		emsg(_("E203: Autocommands deleted or unloaded buffer to be written"));
+		emsg(_(e_autocommands_deleted_or_unloaded_buffer_to_be_written));
 	    return FAIL;
 	}
 
@@ -953,7 +953,7 @@
 		{
 		    --no_wait_return;
 		    msg_scroll = msg_save;
-		    emsg(_("E204: Autocommand changed number of lines in unexpected way"));
+		    emsg(_(e_autocommands_changed_number_of_lines_in_unexpected_way));
 		    return FAIL;
 		}
 	    }
@@ -1746,7 +1746,7 @@
 		wfname = vim_tempname('w', FALSE);
 		if (wfname == NULL)	// Can't write without a tempfile!
 		{
-		    errmsg = (char_u *)_("E214: Can't find temp file for writing");
+		    errmsg = (char_u *)_(e_cant_find_temp_file_for_writing);
 		    goto restore_backup;
 		}
 	    }
@@ -1764,7 +1764,7 @@
     {
 	if (!forceit)
 	{
-	    errmsg = (char_u *)_("E213: Cannot convert (add ! to write without conversion)");
+	    errmsg = (char_u *)_(e_cannot_convert_add_bang_to_write_without_conversion);
 	    goto restore_backup;
 	}
 	notconverted = TRUE;
@@ -1826,7 +1826,7 @@
 		    else
 #endif
 		    {
-			errmsg = (char_u *)_("E212: Can't open file for writing");
+			errmsg = (char_u *)_(e_cant_open_file_for_writing);
 			if (forceit && vim_strchr(p_cpo, CPO_FWRITE) == NULL
 								  && perm >= 0)
 			{
@@ -2454,7 +2454,7 @@
 	    // If the original file does not exist yet
 	    // the current backup file becomes the original file
 	    if (org == NULL)
-		emsg(_("E205: Patchmode: can't save original file"));
+		emsg(_(e_patchmode_cant_save_original_file));
 	    else if (mch_stat(org, &st) < 0)
 	    {
 		vim_rename(backup, (char_u *)org);
@@ -2474,7 +2474,7 @@
 		    || (empty_fd = mch_open(org,
 				      O_CREAT | O_EXTRA | O_EXCL | O_NOFOLLOW,
 					perm < 0 ? 0666 : (perm & 0777))) < 0)
-	      emsg(_("E206: patchmode: can't touch empty original file"));
+	      emsg(_(e_patchmode_cant_touch_empty_original_file));
 	    else
 	      close(empty_fd);
 	}
@@ -2489,7 +2489,7 @@
     // conversion error.
     if (!p_bk && backup != NULL && !write_info.bw_conv_error
 	    && mch_remove(backup) != 0)
-	emsg(_("E207: Can't delete backup file"));
+	emsg(_(e_cant_delete_backup_file));
 
     goto nofail;
 
diff --git a/src/errors.h b/src/errors.h
index 23b8583..177d8b0 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -412,12 +412,89 @@
 	INIT(= N_("E189: \"%s\" exists (add ! to override)"));
 EXTERN char e_cannot_open_str_for_writing_2[]
 	INIT(= N_("E190: Cannot open \"%s\" for writing"));
-
-
+EXTERN char e_argument_must_be_letter_or_forward_backward_quote[]
+	INIT(= N_("E191: Argument must be a letter or forward/backward quote"));
+EXTERN char e_recursive_use_of_normal_too_deep[]
+	INIT(= N_("E192: Recursive use of :normal too deep"));
+EXTERN char e_str_not_inside_function[]
+	INIT(= N_("E193: %s not inside a function"));
+EXTERN char e_no_alternate_file_name_to_substitute_for_hash[]
+	INIT(= N_("E194: No alternate file name to substitute for '#'"));
+EXTERN char e_cannot_open_viminfo_file_for_reading[]
+	INIT(= N_("E195: Cannot open viminfo file for reading"));
 #ifndef FEAT_DIGRAPHS
 EXTERN char e_no_digraphs_version[]
 	INIT(= N_("E196: No digraphs in this version"));
 #endif
+EXTERN char e_cannot_set_language_to_str[]
+	INIT(= N_("E197: Cannot set language to \"%s\""));
+// E198 unused
+EXTERN char e_active_window_or_buffer_deleted[]
+	INIT(= N_("E199: Active window or buffer deleted"));
+EXTERN char e_readpre_autocommands_made_file_unreadable[]
+	INIT(= N_("E200: *ReadPre autocommands made the file unreadable"));
+EXTERN char e_readpre_autocommands_must_not_change_current_buffer[]
+	INIT(= N_("E201: *ReadPre autocommands must not change current buffer"));
+EXTERN char e_conversion_mad_file_unreadable[]
+	INIT(= N_("E202: Conversion made file unreadable!"));
+EXTERN char e_autocommands_deleted_or_unloaded_buffer_to_be_written[]
+	INIT(= N_("E203: Autocommands deleted or unloaded buffer to be written"));
+EXTERN char e_autocommands_changed_number_of_lines_in_unexpected_way[]
+	INIT(= N_("E204: Autocommand changed number of lines in unexpected way"));
+EXTERN char e_patchmode_cant_save_original_file[]
+	INIT(= N_("E205: Patchmode: can't save original file"));
+EXTERN char e_patchmode_cant_touch_empty_original_file[]
+	INIT(= N_("E206: patchmode: can't touch empty original file"));
+EXTERN char e_cant_delete_backup_file[]
+	INIT(= N_("E207: Can't delete backup file"));
+EXTERN char e_error_writing_to_str[]
+	INIT(= N_("E208: Error writing to \"%s\""));
+EXTERN char e_error_closing_str[]
+	INIT(= N_("E209: Error closing \"%s\""));
+EXTERN char e_error_reading_str[]
+	INIT(= N_("E210: Error reading \"%s\""));
+EXTERN char e_file_str_no_longer_available[]
+	INIT(= N_("E211: File \"%s\" no longer available"));
+EXTERN char e_cant_open_file_for_writing[]
+	INIT(= N_("E212: Can't open file for writing"));
+EXTERN char e_cannot_convert_add_bang_to_write_without_conversion[]
+	INIT(= N_("E213: Cannot convert (add ! to write without conversion)"));
+EXTERN char e_cant_find_temp_file_for_writing[]
+	INIT(= N_("E214: Can't find temp file for writing"));
+EXTERN char e_illegal_character_after_star_str[]
+	INIT(= N_("E215: Illegal character after *: %s"));
+EXTERN char e_no_such_event_str[]
+	INIT(= N_("E216: No such event: %s"));
+EXTERN char e_no_such_group_or_event_str[]
+	INIT(= N_("E216: No such group or event: %s"));
+EXTERN char e_cant_execute_autocommands_for_all_events[]
+	INIT(= N_("E217: Can't execute autocommands for ALL events"));
+EXTERN char e_autocommand_nesting_too_deep[]
+	INIT(= N_("E218: autocommand nesting too deep"));
+EXTERN char e_missing_open_curly[]
+	INIT(= N_("E219: Missing {."));
+EXTERN char e_missing_close_curly[]
+	INIT(= N_("E220: Missing }."));
+EXTERN char e_marker_cannot_start_with_lower_case_letter[]
+	INIT(= N_("E221: Marker cannot start with lower case letter"));
+EXTERN char e_add_to_internal_buffer_that_was_already_read_from[]
+	INIT(= N_("E222: Add to internal buffer that was already read from"));
+EXTERN char e_recursive_mapping[]
+	INIT(= N_("E223: recursive mapping"));
+EXTERN char e_global_abbreviation_already_exists_for_str[]
+	INIT(= N_("E224: global abbreviation already exists for %s"));
+EXTERN char e_global_mapping_already_exists_for_str[]
+	INIT(= N_("E225: global mapping already exists for %s"));
+EXTERN char e_abbreviation_already_exists_for_str[]
+	INIT(= N_("E226: abbreviation already exists for %s"));
+EXTERN char e_mapping_already_exists_for_str[]
+	INIT(= N_("E227: mapping already exists for %s"));
+EXTERN char e_makemap_illegal_mode[]
+	INIT(= N_("E228: makemap: Illegal mode"));
+EXTERN char e_cannot_start_the_GUI[]
+	INIT(= N_("E229: Cannot start the GUI"));
+
+
 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
 EXTERN char e_cannot_allocate_color_str[]
 	INIT(= N_("E254: Cannot allocate color %s"));
diff --git a/src/evalvars.c b/src/evalvars.c
index 4ddd215..03ed5c1 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -626,7 +626,7 @@
 	*p = NUL;
 	if (!script_get && vim_islower(*marker))
 	{
-	    emsg(_("E221: Marker cannot start with lower case letter"));
+	    emsg(_(e_marker_cannot_start_with_lower_case_letter));
 	    return NULL;
 	}
     }
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 40955ad..3b293e9 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -8335,7 +8335,7 @@
 	curwin->w_cursor.lnum = eap->line2;
 	beginline(BL_WHITE | BL_FIX);
 	if (setmark(*eap->arg) == FAIL)	// set mark
-	    emsg(_("E191: Argument must be a letter or forward/backward quote"));
+	    emsg(_(e_argument_must_be_letter_or_forward_backward_quote));
 	curwin->w_cursor = pos;		// restore curwin->w_cursor
     }
 }
@@ -8426,7 +8426,7 @@
     }
     if (ex_normal_busy >= p_mmd)
     {
-	emsg(_("E192: Recursive use of :normal too deep"));
+	emsg(_(e_recursive_use_of_normal_too_deep));
 	return;
     }
 
@@ -9062,7 +9062,7 @@
 		    buf = buflist_findnr(i);
 		    if (buf == NULL)
 		    {
-			*errormsg = _("E194: No alternate file name to substitute for '#'");
+			*errormsg = _(e_no_alternate_file_name_to_substitute_for_hash);
 			return NULL;
 		    }
 		    if (lnump != NULL)
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 337f1ed..cb3fbc6 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -2516,15 +2516,15 @@
 }
 
 /*
- * ":endfunction" when not after a ":function"
+ * ":endfunction" or ":enddef" when not after a ":function"
  */
     void
 ex_endfunction(exarg_T *eap)
 {
     if (eap->cmdidx == CMD_enddef)
-	emsg(_("E193: :enddef not inside a function"));
+	semsg(_(e_str_not_inside_function), ":enddef");
     else
-	emsg(_("E193: :endfunction not inside a function"));
+	semsg(_(e_str_not_inside_function), ":endfunction");
 }
 
 /*
diff --git a/src/ex_getln.c b/src/ex_getln.c
index b4316d8..814681b 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4390,7 +4390,7 @@
     if (!win_valid(old_curwin) || !bufref_valid(&old_curbuf))
     {
 	cmdwin_result = Ctrl_C;
-	emsg(_("E199: Active window or buffer deleted"));
+	emsg(_(e_active_window_or_buffer_deleted));
     }
     else
     {
diff --git a/src/fileio.c b/src/fileio.c
index 2f3dc39..5a731a8 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -727,9 +727,9 @@
 	    --no_wait_return;
 	    msg_scroll = msg_save;
 	    if (fd < 0)
-		emsg(_("E200: *ReadPre autocommands made the file unreadable"));
+		emsg(_(e_readpre_autocommands_made_file_unreadable));
 	    else
-		emsg(_("E201: *ReadPre autocommands must not change current buffer"));
+		emsg(_(e_readpre_autocommands_must_not_change_current_buffer));
 	    curbuf->b_p_ro = TRUE;	// must use "w!" now
 	    return FAIL;
 	}
@@ -1053,7 +1053,7 @@
 		    if (fd < 0)
 		    {
 			// Re-opening the original file failed!
-			emsg(_("E202: Conversion made file unreadable!"));
+			emsg(_(e_conversion_mad_file_unreadable));
 			error = TRUE;
 			goto failed;
 		    }
@@ -3873,17 +3873,17 @@
     while ((n = read_eintr(fd_in, buffer, WRITEBUFSIZE)) > 0)
 	if (write_eintr(fd_out, buffer, n) != n)
 	{
-	    errmsg = _("E208: Error writing to \"%s\"");
+	    errmsg = _(e_error_writing_to_str);
 	    break;
 	}
 
     vim_free(buffer);
     close(fd_in);
     if (close(fd_out) < 0)
-	errmsg = _("E209: Error closing \"%s\"");
+	errmsg = _(e_error_closing_str);
     if (n < 0)
     {
-	errmsg = _("E210: Error reading \"%s\"");
+	errmsg = _(e_error_reading_str);
 	to = from;
     }
 #ifndef UNIX	    // for Unix mch_open() already set the permission
@@ -4172,7 +4172,7 @@
 		{
 		    // Only give the message once.
 		    if (prev_b_mtime != -1)
-			mesg = _("E211: File \"%s\" no longer available");
+			mesg = _(e_file_str_no_longer_available);
 		}
 		else
 		{
@@ -5613,9 +5613,9 @@
     if (nested != 0)
     {
 	if (nested < 0)
-	    emsg(_("E219: Missing {."));
+	    emsg(_(e_missing_open_curly));
 	else
-	    emsg(_("E220: Missing }."));
+	    emsg(_(e_missing_close_curly));
 	VIM_CLEAR(reg_pat);
     }
     return reg_pat;
diff --git a/src/getchar.c b/src/getchar.c
index 102eb2f..209ee06 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -208,7 +208,7 @@
     }
     else if (buf->bh_curr == NULL)	// buffer has already been read
     {
-	iemsg(_("E222: Add to read buffer"));
+	iemsg(_(e_add_to_internal_buffer_that_was_already_read_from));
 	return;
     }
     else if (buf->bh_index != 0)
@@ -2758,7 +2758,7 @@
 	 */
 	if (++*mapdepth >= p_mmd)
 	{
-	    emsg(_("E223: recursive mapping"));
+	    emsg(_(e_recursive_mapping));
 	    if (State & CMDLINE)
 		redrawcmdline();
 	    else
diff --git a/src/gui.c b/src/gui.c
index 9b19cef..a5f449a 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -388,7 +388,7 @@
     if (result != MAYBE)
     {
 	if (result == FAIL)
-	    emsg(_("E229: Cannot start the GUI"));
+	    emsg(_(e_cannot_start_the_GUI));
 	return result;
     }
 
diff --git a/src/locale.c b/src/locale.c
index 54f4161..1c72c43 100644
--- a/src/locale.c
+++ b/src/locale.c
@@ -339,7 +339,7 @@
 # endif
 	}
 	if (loc == NULL)
-	    semsg(_("E197: Cannot set language to \"%s\""), name);
+	    semsg(_(e_cannot_set_language_to_str), name);
 	else
 	{
 # ifdef HAVE_NL_MSG_CAT_CNTR
diff --git a/src/map.c b/src/map.c
index a958803..311f4da 100644
--- a/src/map.c
+++ b/src/map.c
@@ -603,12 +603,11 @@
 			    && STRNCMP(mp->m_keys, keys, (size_t)len) == 0)
 		    {
 			if (abbrev)
-			    semsg(_(
-			    "E224: global abbreviation already exists for %s"),
+			    semsg(
+			       _(e_global_abbreviation_already_exists_for_str),
 				    mp->m_keys);
 			else
-			    semsg(_(
-				 "E225: global mapping already exists for %s"),
+			    semsg(_(e_global_mapping_already_exists_for_str),
 				    mp->m_keys);
 			retval = 5;
 			goto theend;
@@ -741,12 +740,11 @@
 			    else if (unique)
 			    {
 				if (abbrev)
-				    semsg(_(
-				   "E226: abbreviation already exists for %s"),
+				    semsg(
+				      _(e_abbreviation_already_exists_for_str),
 					    p);
 				else
-				    semsg(_(
-					"E227: mapping already exists for %s"),
+				    semsg(_(e_mapping_already_exists_for_str),
 					    p);
 				retval = 5;
 				goto theend;
@@ -1855,7 +1853,7 @@
 			c1 = 't';
 			break;
 		    default:
-			iemsg(_("E228: makemap: Illegal mode"));
+			iemsg(_(e_makemap_illegal_mode));
 			return FAIL;
 		}
 		do	// do this twice if c2 is set, 3 times with c3
diff --git a/src/version.c b/src/version.c
index 80f5048..2ea4b04 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3959,
+/**/
     3958,
 /**/
     3957,
