diff --git a/src/netbeans.c b/src/netbeans.c
index 56a2582..7966cf5 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -477,7 +477,7 @@
     if (*verb != ':')
     {
 	nbdebug(("    missing colon: %s\n", cmd));
-	semsg(e_missing_colon_str, cmd);
+	semsg(_(e_missing_colon_str), cmd);
 	return;
     }
     ++verb; // skip colon
@@ -501,7 +501,7 @@
     if (isfunc < 0)
     {
 	nbdebug(("    missing ! or / in: %s\n", cmd));
-	semsg(e_missing_bang_or_slash_in_str, cmd);
+	semsg(_(e_missing_bang_or_slash_in_str), cmd);
 	return;
     }
 
@@ -518,7 +518,7 @@
 	 * so I'm disabling it except for debugging.
 	 */
 	nbdebug(("nb_parse_cmd: Command error for \"%s\"\n", cmd));
-	emsg(e_bad_return_from_nb_do_cmd);
+	emsg(_(e_bad_return_from_nb_do_cmd));
 #endif
     }
 }
@@ -1040,7 +1040,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    Invalid buffer identifier in getAnno\n"));
-		emsg(e_invalid_buffer_identifier_in_getanno);
+		emsg(_(e_invalid_buffer_identifier_in_getanno));
 		retval = FAIL;
 	    }
 	    else
@@ -1063,7 +1063,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in getLength\n"));
-		emsg(e_invalid_buffer_identifier_in_getlength);
+		emsg(_(e_invalid_buffer_identifier_in_getlength));
 		retval = FAIL;
 	    }
 	    else
@@ -1085,7 +1085,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in getText\n"));
-		emsg(e_invalid_buffer_identifier_in_gettext);
+		emsg(_(e_invalid_buffer_identifier_in_gettext));
 		retval = FAIL;
 	    }
 	    else
@@ -1148,7 +1148,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in remove\n"));
-		emsg(e_invalid_buffer_identifier_in_remove);
+		emsg(_(e_invalid_buffer_identifier_in_remove));
 		retval = FAIL;
 	    }
 	    else
@@ -1318,7 +1318,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in insert\n"));
-		emsg(e_invalid_buffer_identifier_in_insert);
+		emsg(_(e_invalid_buffer_identifier_in_insert));
 		retval = FAIL;
 	    }
 	    else if (args != NULL)
@@ -1478,7 +1478,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in create\n"));
-		emsg(e_invalid_buffer_identifier_in_create);
+		emsg(_(e_invalid_buffer_identifier_in_create));
 		return FAIL;
 	    }
 	    VIM_CLEAR(buf->displayname);
@@ -1526,7 +1526,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in startDocumentListen\n"));
-		emsg(e_invalid_buffer_identifier_in_startdocumentlisten);
+		emsg(_(e_invalid_buffer_identifier_in_startdocumentlisten));
 		return FAIL;
 	    }
 	    buf->fireChanges = 1;
@@ -1537,7 +1537,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in stopDocumentListen\n"));
-		emsg(e_invalid_buffer_identifier_in_stopdocumentlisten);
+		emsg(_(e_invalid_buffer_identifier_in_stopdocumentlisten));
 		return FAIL;
 	    }
 	    buf->fireChanges = 0;
@@ -1567,7 +1567,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setTitle\n"));
-		emsg(e_invalid_buffer_identifier_in_settitle);
+		emsg(_(e_invalid_buffer_identifier_in_settitle));
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1579,7 +1579,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in initDone\n"));
-		emsg(e_invalid_buffer_identifier_in_initdone);
+		emsg(_(e_invalid_buffer_identifier_in_initdone));
 		return FAIL;
 	    }
 	    do_update = 1;
@@ -1600,7 +1600,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setBufferNumber\n"));
-		emsg(e_invalid_buffer_identifier_in_setbuffernumber);
+		emsg(_(e_invalid_buffer_identifier_in_setbuffernumber));
 		return FAIL;
 	    }
 	    path = (char_u *)nb_unquote(args, NULL);
@@ -1611,7 +1611,7 @@
 	    if (bufp == NULL)
 	    {
 		nbdebug(("    File %s not found in setBufferNumber\n", args));
-		semsg(e_file_str_not_found_in_setbuffernumber, args);
+		semsg(_(e_file_str_not_found_in_setbuffernumber), args);
 		return FAIL;
 	    }
 	    buf->bufp = bufp;
@@ -1636,7 +1636,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setFullName\n"));
-		emsg(e_invalid_buffer_identifier_in_setfullname);
+		emsg(_(e_invalid_buffer_identifier_in_setfullname));
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1659,7 +1659,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in editFile\n"));
-		emsg(e_invalid_buffer_identifier_in_editfile);
+		emsg(_(e_invalid_buffer_identifier_in_editfile));
 		return FAIL;
 	    }
 	    // Edit a file: like create + setFullName + read the file.
@@ -1685,7 +1685,7 @@
 		// This message was commented out, probably because it can
 		// happen when shutting down.
 		if (p_verbose > 0)
-		    emsg(e_invalid_buffer_identifier_in_setvisible);
+		    emsg(_(e_invalid_buffer_identifier_in_setvisible));
 		return FAIL;
 	    }
 	    if (streq((char *)args, "T") && buf->bufp != curbuf)
@@ -1725,7 +1725,7 @@
 		// This message was commented out, probably because it can
 		// happen when shutting down.
 		if (p_verbose > 0)
-		    emsg(e_invalid_buffer_identifier_in_setmodified);
+		    emsg(_(e_invalid_buffer_identifier_in_setmodified));
 		return FAIL;
 	    }
 	    prev_b_changed = buf->bufp->b_changed;
@@ -1808,7 +1808,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setDot\n"));
-		emsg(e_invalid_buffer_identifier_in_setdot);
+		emsg(_(e_invalid_buffer_identifier_in_setdot));
 		return FAIL;
 	    }
 
@@ -1861,7 +1861,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in close\n"));
-		emsg(e_invalid_buffer_identifier_in_close);
+		emsg(_(e_invalid_buffer_identifier_in_close));
 		return FAIL;
 	    }
 
@@ -1875,7 +1875,7 @@
 		// This message was commented out, probably because it can
 		// happen when shutting down.
 		if (p_verbose > 0)
-		    emsg(e_invalid_buffer_identifier_in_close_2);
+		    emsg(_(e_invalid_buffer_identifier_in_close_2));
 	    }
 	    nbdebug(("    CLOSE %d: %s\n", bufno, name));
 #ifdef FEAT_GUI
@@ -1914,7 +1914,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in defineAnnoType\n"));
-		emsg(e_invalid_buffer_identifier_in_defineannotype);
+		emsg(_(e_invalid_buffer_identifier_in_defineannotype));
 		return FAIL;
 	    }
 
@@ -1942,7 +1942,7 @@
 	    bg = vim_strsave(p);
 	    if (STRLEN(fg) > MAX_COLOR_LENGTH || STRLEN(bg) > MAX_COLOR_LENGTH)
 	    {
-		emsg(e_highlighting_color_name_too_long_in_defineAnnoType);
+		emsg(_(e_highlighting_color_name_too_long_in_defineAnnoType));
 		VIM_CLEAR(typeName);
 		parse_error = TRUE;
 	    }
@@ -1971,7 +1971,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in addAnno\n"));
-		emsg(e_invalid_buffer_identifier_in_addanno);
+		emsg(_(e_invalid_buffer_identifier_in_addanno));
 		return FAIL;
 	    }
 
