diff --git a/man/remind.1.in b/man/remind.1.in index 752d8414..f1f7b6f6 100644 --- a/man/remind.1.in +++ b/man/remind.1.in @@ -5727,8 +5727,10 @@ then \fBRemind\fR \fIalso\fR makes a corresponding translation table entry automatically. This is done for all of the translation-related system variables \fIexcept for\fR \fB$Hplu\fR and \fB$Mplu\fR. .PP -The converse does not apply; creating a translation table entry for -"December" does not automatically set \fB$December\fR. +The converse applies too; creating a translation table for +"December" automatically sets \fB$December\fR. And if you invoke +\fBTRANSLATE CLEAR\fR, then all translation-related system variables +are set to their default values as well. .PP The translation table always contains a special entry \fBLANGID\fR whose default value is \fBen\fR. Translators are encouraged to add a \fBLANGID\fR diff --git a/src/protos.h b/src/protos.h index 88d5ec22..908d3e6d 100644 --- a/src/protos.h +++ b/src/protos.h @@ -267,6 +267,8 @@ void InitDedupeTable(void); void InitVars(void); void InitUserFunctions(void); +void ClearSysvarTranslations(void); +void PropagateTranslationToSysvar(char const *orig, char const *translated); void InitTranslationTable(void); char const *GetTranslatedString(char const *orig); int GetTranslatedStringTryingVariants(char const *orig, DynamicBuffer *out); diff --git a/src/trans.c b/src/trans.c index adae6d92..85bb9ce1 100644 --- a/src/trans.c +++ b/src/trans.c @@ -100,6 +100,7 @@ ClearTranslationTable(void) XlateItem *item; XlateItem *next; + ClearSysvarTranslations(); item = hash_table_next(&TranslationTable, NULL); while(item) { next = hash_table_next(&TranslationTable, item); @@ -234,6 +235,7 @@ InsertTranslation(char const *orig, char const *translated) return E_NO_MEM; } hash_table_insert(&TranslationTable, item); + PropagateTranslationToSysvar(orig, translated); return OK; } diff --git a/src/var.c b/src/var.c index f9b86db5..a46c148c 100644 --- a/src/var.c +++ b/src/var.c @@ -961,42 +961,43 @@ static SysVar SysVarArr[] = { typedef struct translatable_var { char **var; char const *word; + char const *sysvar_name; } TranslatableVar; static TranslatableVar translatables[] = { - { &DynamicAgo, "ago" }, - { &DynamicAm, "am" }, - { &DynamicAnd, "and" }, - { &DynamicAt, "at" }, - { &DynamicFromnow, "from now" }, - { &DynamicHour, "hour" }, - { &DynamicIs, "is" }, - { &DynamicMinute, "minute" }, - { &DynamicNow, "now" }, - { &DynamicOn, "on" }, - { &DynamicPm, "pm" }, - { &DynamicToday, "today" }, - { &DynamicTomorrow, "tomorrow" }, - { &DynamicWas, "was" }, - { &DynamicMonthName[0], "January" }, - { &DynamicMonthName[1], "February" }, - { &DynamicMonthName[2], "March" }, - { &DynamicMonthName[3], "April" }, - { &DynamicMonthName[4], "May" }, - { &DynamicMonthName[5], "June" }, - { &DynamicMonthName[6], "July" }, - { &DynamicMonthName[7], "August" }, - { &DynamicMonthName[8], "September" }, - { &DynamicMonthName[9], "October" }, - { &DynamicMonthName[10], "November" }, - { &DynamicMonthName[11], "December" }, - { &DynamicDayName[0], "Monday" }, - { &DynamicDayName[1], "Tuesday" }, - { &DynamicDayName[2], "Wednesday" }, - { &DynamicDayName[3], "Thursday" }, - { &DynamicDayName[4], "Friday" }, - { &DynamicDayName[5], "Saturday" }, - { &DynamicDayName[6], "Sunday" }, + { &DynamicAgo, "ago", "Ago" }, + { &DynamicAm, "am", "Am" }, + { &DynamicAnd, "and", "And" }, + { &DynamicAt, "at", "At" }, + { &DynamicFromnow, "from now", "Fromnow" }, + { &DynamicHour, "hour", "Hour" }, + { &DynamicIs, "is", "Is" }, + { &DynamicMinute, "minute", "Minute" }, + { &DynamicNow, "now", "Now" }, + { &DynamicOn, "on", "On" }, + { &DynamicPm, "pm", "Pm" }, + { &DynamicToday, "today", "Today" }, + { &DynamicTomorrow, "tomorrow", "Tomorrow" }, + { &DynamicWas, "was", "Was" }, + { &DynamicMonthName[0], "January", "January" }, + { &DynamicMonthName[1], "February", "February" }, + { &DynamicMonthName[2], "March", "March" }, + { &DynamicMonthName[3], "April", "April" }, + { &DynamicMonthName[4], "May", "May" }, + { &DynamicMonthName[5], "June", "June" }, + { &DynamicMonthName[6], "July", "July" }, + { &DynamicMonthName[7], "August", "August" }, + { &DynamicMonthName[8], "September", "September" }, + { &DynamicMonthName[9], "October", "October" }, + { &DynamicMonthName[10], "November", "November" }, + { &DynamicMonthName[11], "December", "December" }, + { &DynamicDayName[0], "Monday", "Monday" }, + { &DynamicDayName[1], "Tuesday", "Tuesday" }, + { &DynamicDayName[2], "Wednesday", "Wednesday" }, + { &DynamicDayName[3], "Thursday", "Thursday" }, + { &DynamicDayName[4], "Friday", "Friday" }, + { &DynamicDayName[5], "Saturday", "Saturday" }, + { &DynamicDayName[6], "Sunday", "Sunday" }, }; #define NUMSYSVARS ( sizeof(SysVarArr) / sizeof(SysVar) ) @@ -1013,6 +1014,41 @@ static void HandleTranslatableVariable(char **var) } } +void PropagateTranslationToSysvar(char const *orig, char const *translated) +{ + size_t i; + SysVar *v; + Value val; + for (i=0; i "MOO" _("meow") => "chirp" _("Meow") => "Chirp" _("MEOW") => "Chirp" +# Translation table +TRANSLATE "LANGID" "en" +TRANSLATE "June" "translated-June" +TRANSLATE "was" "translated-Was" +TRANSLATE "December" "translated-December" +TRANSLATE "October" "translated-October" +TRANSLATE "April" "translated-April" +TRANSLATE "at" "translated-At" +TRANSLATE "and" "translated-And" +TRANSLATE "Wednesday" "translated-Wednesday" +TRANSLATE "ago" "translated-Ago" +TRANSLATE "hour" "translated-Hour" +TRANSLATE "July" "translated-July" +TRANSLATE "minute" "translated-Minute" +TRANSLATE "September" "translated-September" +TRANSLATE "Saturday" "translated-Saturday" +TRANSLATE "Thursday" "translated-Thursday" +TRANSLATE "January" "translated-January" +TRANSLATE "Tuesday" "translated-Tuesday" +TRANSLATE "November" "translated-November" +TRANSLATE "tomorrow" "translated-Tomorrow" +TRANSLATE "today" "translated-Today" +TRANSLATE "is" "translated-Is" +TRANSLATE "from now" "translated-Fromnow" +TRANSLATE "Friday" "translated-Friday" +TRANSLATE "am" "translated-Am" +TRANSLATE "Sunday" "translated-Sunday" +TRANSLATE "Monday" "translated-Monday" +TRANSLATE "March" "translated-March" +TRANSLATE "pm" "translated-Pm" +TRANSLATE "August" "translated-August" +TRANSLATE "May" "translated-May" +TRANSLATE "February" "translated-February" +TRANSLATE "on" "translated-On" +TRANSLATE "now" "translated-Now" +$Ago is otherway-Ago +$Am is otherway-Am +$And is otherway-And +$At is otherway-At +$Fromnow is otherway-Fromnow +$Hour is otherway-Hour +$Is is otherway-Is +$Minute is otherway-Minute +$Now is otherway-Now +$On is otherway-On +$Pm is otherway-Pm +$Today is otherway-Today +$Tomorrow is otherway-Tomorrow +$Was is otherway-Was +$January is otherway-January +$February is otherway-February +$March is otherway-March +$April is otherway-April +$May is otherway-May +$June is otherway-June +$July is otherway-July +$August is otherway-August +$September is otherway-September +$October is otherway-October +$November is otherway-November +$December is otherway-December +$Monday is otherway-Monday +$Tuesday is otherway-Tuesday +$Wednesday is otherway-Wednesday +$Thursday is otherway-Thursday +$Friday is otherway-Friday +$Saturday is otherway-Saturday +$Sunday is otherway-Sunday +# Translation table +TRANSLATE "LANGID" "en" +$Ago is ago +$Am is am +$And is and +$At is at +$Fromnow is from now +$Hour is hour +$Is is is +$Minute is minute +$Now is now +$On is on +$Pm is pm +$Today is today +$Tomorrow is tomorrow +$Was is was +$January is January +$February is February +$March is March +$April is April +$May is May +$June is June +$July is July +$August is August +$September is September +$October is October +$November is November +$December is December +$Monday is Monday +$Tuesday is Tuesday +$Wednesday is Wednesday +$Thursday is Thursday +$Friday is Friday +$Saturday is Saturday +$Sunday is Sunday Var hash: total = 100141; maxlen = 5; avglen = 1.142 Func hash: total = 100016; maxlen = 5; avglen = 1.140 Dedup hash: total = 10000; maxlen = 7; avglen = 1.828 -Trans hash: total = 4; maxlen = 1; avglen = 0.235 +Trans hash: total = 1; maxlen = 1; avglen = 0.059 Expression nodes allocated: 300096 Expression nodes high-water: 300073 Expression nodes leaked: 0 diff --git a/tests/test.rem b/tests/test.rem index d95d987d..59d277cf 100644 --- a/tests/test.rem +++ b/tests/test.rem @@ -1274,6 +1274,154 @@ set a _("meow") set a _("Meow") set a _("MEOW") +# Check bidirectional connection between system variables and translation +# tables +DEBUG -x +TRANSLATE CLEAR + +SET $Ago "translated-Ago" +SET $Am "translated-Am" +SET $And "translated-And" +SET $At "translated-At" +SET $Fromnow "translated-Fromnow" +SET $Hour "translated-Hour" +SET $Is "translated-Is" +SET $Minute "translated-Minute" +SET $Now "translated-Now" +SET $On "translated-On" +SET $Pm "translated-Pm" +SET $Today "translated-Today" +SET $Tomorrow "translated-Tomorrow" +SET $Was "translated-Was" +SET $January "translated-January" +SET $February "translated-February" +SET $March "translated-March" +SET $April "translated-April" +SET $May "translated-May" +SET $June "translated-June" +SET $July "translated-July" +SET $August "translated-August" +SET $September "translated-September" +SET $October "translated-October" +SET $November "translated-November" +SET $December "translated-December" +SET $Monday "translated-Monday" +SET $Tuesday "translated-Tuesday" +SET $Wednesday "translated-Wednesday" +SET $Thursday "translated-Thursday" +SET $Friday "translated-Friday" +SET $Saturday "translated-Saturday" +SET $Sunday "translated-Sunday" + +TRANSLATE DUMP + +TRANSLATE CLEAR +TRANSLATE "ago" "otherway-Ago" +TRANSLATE "am" "otherway-Am" +TRANSLATE "and" "otherway-And" +TRANSLATE "at" "otherway-At" +TRANSLATE "from now" "otherway-Fromnow" +TRANSLATE "hour" "otherway-Hour" +TRANSLATE "is" "otherway-Is" +TRANSLATE "minute" "otherway-Minute" +TRANSLATE "now" "otherway-Now" +TRANSLATE "on" "otherway-On" +TRANSLATE "pm" "otherway-Pm" +TRANSLATE "today" "otherway-Today" +TRANSLATE "tomorrow" "otherway-Tomorrow" +TRANSLATE "was" "otherway-Was" +TRANSLATE "January" "otherway-January" +TRANSLATE "February" "otherway-February" +TRANSLATE "March" "otherway-March" +TRANSLATE "April" "otherway-April" +TRANSLATE "May" "otherway-May" +TRANSLATE "June" "otherway-June" +TRANSLATE "July" "otherway-July" +TRANSLATE "August" "otherway-August" +TRANSLATE "September" "otherway-September" +TRANSLATE "October" "otherway-October" +TRANSLATE "November" "otherway-November" +TRANSLATE "December" "otherway-December" +TRANSLATE "Monday" "otherway-Monday" +TRANSLATE "Tuesday" "otherway-Tuesday" +TRANSLATE "Wednesday" "otherway-Wednesday" +TRANSLATE "Thursday" "otherway-Thursday" +TRANSLATE "Friday" "otherway-Friday" +TRANSLATE "Saturday" "otherway-Saturday" +TRANSLATE "Sunday" "otherway-Sunday" + +MSG $Ago is [$Ago]% +MSG $Am is [$Am]% +MSG $And is [$And]% +MSG $At is [$At]% +MSG $Fromnow is [$Fromnow]% +MSG $Hour is [$Hour]% +MSG $Is is [$Is]% +MSG $Minute is [$Minute]% +MSG $Now is [$Now]% +MSG $On is [$On]% +MSG $Pm is [$Pm]% +MSG $Today is [$Today]% +MSG $Tomorrow is [$Tomorrow]% +MSG $Was is [$Was]% +MSG $January is [$January]% +MSG $February is [$February]% +MSG $March is [$March]% +MSG $April is [$April]% +MSG $May is [$May]% +MSG $June is [$June]% +MSG $July is [$July]% +MSG $August is [$August]% +MSG $September is [$September]% +MSG $October is [$October]% +MSG $November is [$November]% +MSG $December is [$December]% +MSG $Monday is [$Monday]% +MSG $Tuesday is [$Tuesday]% +MSG $Wednesday is [$Wednesday]% +MSG $Thursday is [$Thursday]% +MSG $Friday is [$Friday]% +MSG $Saturday is [$Saturday]% +MSG $Sunday is [$Sunday]% + +TRANSLATE CLEAR +TRANSLATE DUMP +MSG $Ago is [$Ago]% +MSG $Am is [$Am]% +MSG $And is [$And]% +MSG $At is [$At]% +MSG $Fromnow is [$Fromnow]% +MSG $Hour is [$Hour]% +MSG $Is is [$Is]% +MSG $Minute is [$Minute]% +MSG $Now is [$Now]% +MSG $On is [$On]% +MSG $Pm is [$Pm]% +MSG $Today is [$Today]% +MSG $Tomorrow is [$Tomorrow]% +MSG $Was is [$Was]% +MSG $January is [$January]% +MSG $February is [$February]% +MSG $March is [$March]% +MSG $April is [$April]% +MSG $May is [$May]% +MSG $June is [$June]% +MSG $July is [$July]% +MSG $August is [$August]% +MSG $September is [$September]% +MSG $October is [$October]% +MSG $November is [$November]% +MSG $December is [$December]% +MSG $Monday is [$Monday]% +MSG $Tuesday is [$Tuesday]% +MSG $Wednesday is [$Wednesday]% +MSG $Thursday is [$Thursday]% +MSG $Friday is [$Friday]% +MSG $Saturday is [$Saturday]% +MSG $Sunday is [$Sunday]% + + + # Output expression-node stats DEBUG +s diff --git a/tests/torture-test.rem b/tests/torture-test.rem index 9c211a1a..a6dc3293 100644 --- a/tests/torture-test.rem +++ b/tests/torture-test.rem @@ -310009,3 +310009,4 @@ REM MSG Dedup-9996 REM MSG Dedup-9997 REM MSG Dedup-9998 REM MSG Dedup-9999 +set $DedupeReminders 0