Add mechanism to translate variable messages in WinBoard
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 24 Oct 2011 17:26:02 +0000 (19:26 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 24 Oct 2011 17:26:02 +0000 (19:26 +0200)
A message prefixed with % in the lng file will be considered a match
if it matches the start of the text to be printed, and the remaining
part of the latter will remain untranslated. This was needed to allow
translation of the perpetual change message, now it indicates the square
of the chased piece.

winboard/winboard.c

index febef6b..0016e7a 100644 (file)
@@ -334,7 +334,7 @@ int dialogItems[][41        ] = {
 { 0 }\r
 };\r
 \r
-static char languageBuf[50000], *foreign[1000], *english[1000], *languageFile[MSG_SIZ];\r
+static char languageBuf[70000], *foreign[1000], *english[1000], *languageFile[MSG_SIZ];\r
 static int lastChecked;\r
 static char oldLanguage[MSG_SIZ], *menuText[10][30];\r
 extern int tinyLayout;\r
@@ -388,11 +388,16 @@ T_(char *s)
 {   // return the translation of the given string\r
     // efficiency can be improved a lot...\r
     int i=0;\r
+    static char buf[MSG_SIZ];\r
 //if(appData.debugMode) fprintf(debugFP, "T_(%s)\n", s);\r
     if(!barbaric) return s;\r
     if(!s) return ""; // sanity\r
     while(english[i]) {\r
         if(!strcmp(s, english[i])) return foreign[i];\r
+       if(english[i][0] == '%' && strstr(s, english[i]+1) == s) { // allow translation of strings with variable ending\r
+           snprintf(buf, MSG_SIZ, "%s%s", foreign[i], s + strlen(english[i]+1)); // keep unmatched portion\r
+           return buf;\r
+       }\r
         i++;\r
     }\r
     return s;\r