diff --git a/src/bufwrite.c b/src/bufwrite.c
index dfc2995..45e9628 100644
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -667,7 +667,6 @@
     int		    prev_got_int = got_int;
     int		    checking_conversion;
     int		    file_readonly = FALSE;  // overwritten file is read-only
-    static char	    *err_readonly = "is read-only (cannot override: \"W\" in 'cpoptions')";
 #if defined(UNIX)			    // XXX fix me sometime?
     int		    made_writable = FALSE;  // 'w' bit has been set
 #endif
@@ -897,7 +896,7 @@
 	    --no_wait_return;
 	    msg_scroll = msg_save;
 	    if (nofile_err)
-		emsg(_("E676: No matching autocommands for acwrite buffer"));
+		emsg(_(e_no_matching_autocommands_for_acwrite_buffer));
 
 	    if (nofile_err
 #ifdef FEAT_EVAL
@@ -995,7 +994,7 @@
 	    else
 	    {
 		errnum = (char_u *)"E656: ";
-		errmsg = (char_u *)_("NetBeans disallows writes of unmodified buffers");
+		errmsg = (char_u *)_(e_netbeans_disallows_writes_of_unmodified_buffers);
 		buffer = NULL;
 		goto fail;
 	    }
@@ -1003,7 +1002,7 @@
 	else
 	{
 	    errnum = (char_u *)"E657: ";
-	    errmsg = (char_u *)_("Partial writes disallowed for NetBeans buffers");
+	    errmsg = (char_u *)_(e_partial_writes_disallowed_for_netbeans_buffers);
 	    buffer = NULL;
 	    goto fail;
 	}
@@ -1050,13 +1049,13 @@
 	    if (S_ISDIR(st_old.st_mode))
 	    {
 		errnum = (char_u *)"E502: ";
-		errmsg = (char_u *)_("is a directory");
+		errmsg = (char_u *)_(e_is_a_directory);
 		goto fail;
 	    }
 	    if (mch_nodetype(fname) != NODE_WRITABLE)
 	    {
 		errnum = (char_u *)"E503: ";
-		errmsg = (char_u *)_("is not a file or writable device");
+		errmsg = (char_u *)_(e_is_not_file_or_writable_device);
 		goto fail;
 	    }
 	    // It's a device of some kind (or a fifo) which we can write to
@@ -1072,7 +1071,7 @@
     if (c == NODE_OTHER)
     {
 	errnum = (char_u *)"E503: ";
-	errmsg = (char_u *)_("is not a file or writable device");
+	errmsg = (char_u *)_(e_is_not_file_or_writable_device);
 	goto fail;
     }
     if (c == NODE_WRITABLE)
@@ -1083,7 +1082,7 @@
 	if (!p_odev)
 	{
 	    errnum = (char_u *)"E796: ";
-	    errmsg = (char_u *)_("writing to device disabled with 'opendevice' option");
+	    errmsg = (char_u *)_(e_writing_to_device_disabled_with_opendevice_option);
 	    goto fail;
 	}
 # endif
@@ -1099,7 +1098,7 @@
 	else if (mch_isdir(fname))
 	{
 	    errnum = (char_u *)"E502: ";
-	    errmsg = (char_u *)_("is a directory");
+	    errmsg = (char_u *)_(e_is_a_directory);
 	    goto fail;
 	}
 	if (overwriting)
@@ -1118,12 +1117,12 @@
 	    if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
 	    {
 		errnum = (char_u *)"E504: ";
-		errmsg = (char_u *)_(err_readonly);
+		errmsg = (char_u *)_(e_is_read_only_cannot_override_W_in_cpoptions);
 	    }
 	    else
 	    {
 		errnum = (char_u *)"E505: ";
-		errmsg = (char_u *)_("is read-only (add ! to override)");
+		errmsg = (char_u *)_(e_is_read_only_add_bang_to_override);
 	    }
 	    goto fail;
 	}
@@ -1477,7 +1476,7 @@
 			{
 			    if (buf_write_bytes(&write_info) == FAIL)
 			    {
-				errmsg = (char_u *)_("E506: Can't write to backup file (add ! to override)");
+				errmsg = (char_u *)_(e_canot_write_to_backup_file_add_bang_to_override);
 				break;
 			    }
 			    ui_breakcheck();
@@ -1489,9 +1488,9 @@
 			}
 
 			if (close(bfd) < 0 && errmsg == NULL)
-			    errmsg = (char_u *)_("E507: Close error for backup file (add ! to override)");
+			    errmsg = (char_u *)_(e_close_error_for_backup_file_add_bang_to_write_anyway);
 			if (write_info.bw_len < 0)
-			    errmsg = (char_u *)_("E508: Can't read file for backup (add ! to override)");
+			    errmsg = (char_u *)_(e_cant_read_file_for_backup_add_bang_to_write_anyway);
 #ifdef UNIX
 			set_file_time(backup, st_old.st_atime, st_old.st_mtime);
 #endif
@@ -1513,7 +1512,7 @@
 	    vim_free(copybuf);
 
 	    if (backup == NULL && errmsg == NULL)
-		errmsg = (char_u *)_("E509: Cannot create backup file (add ! to override)");
+		errmsg = (char_u *)_(e_cannot_create_backup_file_add_bang_to_write_anyway);
 	    // ignore errors when forceit is TRUE
 	    if ((some_error || errmsg != NULL) && !forceit)
 	    {
@@ -1536,7 +1535,7 @@
 	    if (file_readonly && vim_strchr(p_cpo, CPO_FWRITE) != NULL)
 	    {
 		errnum = (char_u *)"E504: ";
-		errmsg = (char_u *)_(err_readonly);
+		errmsg = (char_u *)_(e_is_read_only_cannot_override_W_in_cpoptions);
 		goto fail;
 	    }
 
@@ -1608,7 +1607,7 @@
 	    }
 	    if (backup == NULL && !forceit)
 	    {
-		errmsg = (char_u *)_("E510: Can't make backup file (add ! to override)");
+		errmsg = (char_u *)_(e_cant_make_backup_file_add_bang_to_write_anyway);
 		goto fail;
 	    }
 	}
@@ -1903,7 +1902,7 @@
 			&& st.st_ino != st_old.st_ino)
 		{
 		    close(fd);
-		    errmsg = (char_u *)_("E949: File changed while writing");
+		    errmsg = (char_u *)_(e_file_changed_while_writing);
 		    goto fail;
 		}
 	    }
@@ -2229,7 +2228,7 @@
 #endif
 	if (close(fd) != 0)
 	{
-	    errmsg = (char_u *)_("E512: Close failed");
+	    errmsg = (char_u *)_(e_close_failed);
 	    end = 0;
 	}
 
@@ -2286,19 +2285,19 @@
 	    if (write_info.bw_conv_error)
 	    {
 		if (write_info.bw_conv_error_lnum == 0)
-		    errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
+		    errmsg = (char_u *)_(e_write_error_conversion_failed_make_fenc_empty_to_override);
 		else
 		{
 		    errmsg_allocated = TRUE;
 		    errmsg = alloc(300);
-		    vim_snprintf((char *)errmsg, 300, _("E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"),
+		    vim_snprintf((char *)errmsg, 300, _(e_write_error_conversion_failed_in_line_nr_make_fenc_empty_to_override),
 					 (long)write_info.bw_conv_error_lnum);
 		}
 	    }
 	    else if (got_int)
 		errmsg = (char_u *)_(e_interr);
 	    else
-		errmsg = (char_u *)_("E514: write error (file system full?)");
+		errmsg = (char_u *)_(e_write_error_file_system_full);
 	}
 
 	// If we have a backup file, try to put it in place of the new file,
