Ignore context tags (prefixes) in translatable strings with less than 2 characters...
authorterencehill <piuntn@gmail.com>
Mon, 7 Oct 2019 08:51:14 +0000 (10:51 +0200)
committerterencehill <piuntn@gmail.com>
Mon, 7 Oct 2019 08:53:26 +0000 (10:53 +0200)
qcsrc/lib/i18n.qh

index 841486f..cbdf553 100644 (file)
@@ -48,8 +48,16 @@ string CTX(string s)
        string c = HM_gets(CTX_cache, s);
        if (c != "") return c;
 #endif
-       int p = strstrofs(s, "^", 0);
-       string ret = (p < 0) ? s : substring(s, p + 1, -1);
+       int caret_ofs = strstrofs(s, "^", 0);
+       string ret = s;
+       // empty (caret_ofs == 0) and one char (caret_ofs == 1) prefixes are invalid
+       if (caret_ofs > 1)
+       {
+               int space_ofs = strstrofs(substring(s, 0, caret_ofs), " ", 0);
+               // prefixes containing a space are invalid (likely the caret is part of a color code)
+               if (space_ofs < 0 || space_ofs > caret_ofs)
+                       ret = substring(s, caret_ofs + 1, -1);
+       }
 #if CTX_CACHE
        LOG_DEBUGF("CTX(\"%s\")", s);
        HM_sets(CTX_cache, s, ret);