diff --git a/src/vim9compile.c b/src/vim9compile.c
index b9d8caa..a552c85 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -295,7 +295,7 @@
 	    || find_func_even_dead(p, FALSE, cctx) != NULL)
     {
 	p[len] = c;
-	semsg(_(e_name_already_defined), p);
+	semsg(_(e_name_already_defined_str), p);
 	return FAIL;
     }
     p[len] = c;
@@ -2202,14 +2202,14 @@
 
 	if (*p != ',' && *skipwhite(p) == ',')
 	{
-	    semsg(_(e_no_white_space_allowed_before), ",");
+	    semsg(_(e_no_white_space_allowed_before_str), ",");
 	    p = skipwhite(p);
 	}
 	if (*p == ',')
 	{
 	    ++p;
 	    if (*p != NUL && !VIM_ISWHITE(*p))
-		semsg(_(e_white_space_required_after), ",");
+		semsg(_(e_white_space_required_after_str), ",");
 	}
 	whitep = p;
 	p = skipwhite(p);
@@ -2416,7 +2416,7 @@
 	}
 	if (*p == ',')
 	{
-	    semsg(_(e_no_white_space_allowed_before), ",");
+	    semsg(_(e_no_white_space_allowed_before_str), ",");
 	    return FAIL;
 	}
 	if (*p == ']')
@@ -2432,7 +2432,7 @@
 	    ++p;
 	    if (*p != ']' && !IS_WHITE_OR_NUL(*p))
 	    {
-		semsg(_(e_white_space_required_after), ",");
+		semsg(_(e_white_space_required_after_str), ",");
 		return FAIL;
 	    }
 	}
@@ -2618,7 +2618,7 @@
 	if (**arg != ':')
 	{
 	    if (*skipwhite(*arg) == ':')
-		semsg(_(e_no_white_space_allowed_before), ":");
+		semsg(_(e_no_white_space_allowed_before_str), ":");
 	    else
 		semsg(_(e_missing_dict_colon), *arg);
 	    return FAIL;
@@ -2626,7 +2626,7 @@
 	whitep = *arg + 1;
 	if (!IS_WHITE_OR_NUL(*whitep))
 	{
-	    semsg(_(e_white_space_required_after), ":");
+	    semsg(_(e_white_space_required_after_str), ":");
 	    return FAIL;
 	}
 
@@ -2657,7 +2657,7 @@
 	}
 	if (IS_WHITE_OR_NUL(*whitep))
 	{
-	    semsg(_(e_no_white_space_allowed_before), ",");
+	    semsg(_(e_no_white_space_allowed_before_str), ",");
 	    return FAIL;
 	}
 	whitep = *arg + 1;
@@ -3518,7 +3518,7 @@
     char_u	buf[10];
 
     vim_strncpy(buf, op, len);
-    semsg(_(e_white_space_required_before_and_after), buf);
+    semsg(_(e_white_space_required_before_and_after_str), buf);
 }
 
 /*
@@ -3542,7 +3542,7 @@
 	if (**arg != '>')
 	{
 	    if (*skipwhite(*arg) == '>')
-		semsg(_(e_no_white_space_allowed_before), ">");
+		semsg(_(e_no_white_space_allowed_before_str), ">");
 	    else
 		emsg(_(e_missing_gt));
 	    return FAIL;
@@ -3887,7 +3887,7 @@
 
 	    if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[2]))
 	    {
-		semsg(_(e_white_space_required_before_and_after), op);
+		semsg(_(e_white_space_required_before_and_after_str), op);
 		return FAIL;
 	    }
 
@@ -4028,7 +4028,7 @@
 
 	if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[1]))
 	{
-	    semsg(_(e_white_space_required_before_and_after), "?");
+	    semsg(_(e_white_space_required_before_and_after_str), "?");
 	    return FAIL;
 	}
 
@@ -4087,7 +4087,7 @@
 
 	if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[1]))
 	{
-	    semsg(_(e_white_space_required_before_and_after), ":");
+	    semsg(_(e_white_space_required_before_and_after_str), ":");
 	    return FAIL;
 	}
 
@@ -4394,7 +4394,7 @@
 		  return;
 	case '&': semsg(_(e_cannot_declare_an_option), name);
 		  return;
-	case '@': semsg(_(e_cannot_declare_a_register), name);
+	case '@': semsg(_(e_cannot_declare_a_register_str), name);
 		  return;
 	default: return;
     }
@@ -4775,7 +4775,7 @@
 		// parse optional type: "let var: type = expr"
 		if (!VIM_ISWHITE(p[1]))
 		{
-		    semsg(_(e_white_space_required_after), ":");
+		    semsg(_(e_white_space_required_after_str), ":");
 		    goto theend;
 		}
 		p = skipwhite(p + 1);
@@ -6042,7 +6042,7 @@
 	end = skip_regexp_ex(p + 1, *p, TRUE, &tofree, &dropped);
 	if (*end != *p)
 	{
-	    semsg(_(e_separator_mismatch), p);
+	    semsg(_(e_separator_mismatch_str), p);
 	    vim_free(tofree);
 	    return FAIL;
 	}
