Files
source/i18n/text.def
T
fd2c74727e Make LANGUAGE switchable in runtime (#653)
squashed into a single commit because doing it in steps that all
compiled involved a lot of boilerplate that is pointless to commit to
the repository. GH still has the PR for reference.

g_lang, MAX_MESSAGES_ON_MAP_BOTTOM, and GetLanguagePrefix() were
compile-time constants selected by the ENGLISH/GERMAN/... build
define. They're now runtime, defaulting to the same per-exe value the
define used to pick, and overridable at startup from [Ja2 Settings]
LANGUAGE in Ja2.ini.

-

XMLTacticalMessages is filled at runtime from NewTacticalMessages.xml,
never from compiled-in per-language data: all 8 per-language definitions
were the identical all-zero { L"" }. Delete them and define one shared
buffer in Utils/XML_Language.cpp (the loader) instead of pointer-rebinding
it like the static tables — this drops 9 dead 800KB zero-buffers (8
namespaced copies in LanguageStrings.cpp plus the standalone one) and
leaves no bind-ordering hazard for the XML load path.

-

ExportStrings.cpp privately recompiled one language's full text table
by #including the raw _<LANG>Text.cpp inside namespace Loc, keyed off
the exe-level ENGLISH/GERMAN/... compile macro (whichever the build
happened to select). That's redundant with the pointer globals every
other subsystem already uses (Text.h / LanguageStrings.cpp).

Drop the private copy; the unqualified table names in Loc::ExportStrings
now resolve to the global pointer externs, which BindLanguageStrings has
already rebound to the runtime g_lang by the time this runs (EXPORT_STRINGS
ini flag, checked after GetRuntimeSettings in sgp.cpp). gs_Lang (used only
by Loc::Translate for the Polish/Russian byte remap on raw .edt exports) is
now derived from g_lang via ToLocLanguage, so the export always matches
whatever language is actually active instead of a compile-time pick.

-

Editor/popupmenu.cpp and Strategic/Scheduling.cpp kept their own
call-site extern of gszScheduleActions as CHAR16[NUM_SCHEDULE_ACTIONS][20]
after the real definition changed into a rebindable pointer
(CHAR16 (*)[20], LanguageStrings.cpp). MSVC decays the outer array
dimension when mangling globals, so both declarations produce the same
symbol (?gszScheduleActions@@3PAY0BE@_WA) and the mismatch linked
silently -- but the array-typed TUs then indexed the 4-byte pointer
slot itself as string data, so the editor schedule popup and the map
schedule message text read garbage.

-

add text.def to be single-source of truth on symbol names and use it
 .much simpler, less error prone if adding more strings

-

add pseudo interface for language state. MAX_SAGES_ON_BOTTOM must always
 change in lockstep with g_lang. this isn't foolproof but better

---------

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-07-21 05:33:03 -03:00

520 lines
13 KiB
Modula-2

X(pMenuStrings)
X(pLocationPageText)
X(pSectorPageText)
X(pEncyclopediaHelpText)
X(pEncyclopediaTypeText)
X(pEncyclopediaSkrotyText)
X(pEncyclopediaFilterLocationText)
X(pEncyclopediaSubFilterLocationText)
X(pEncyclopediaFilterCharText)
X(pEncyclopediaSubFilterCharText)
X(pEncyclopediaFilterItemText)
X(pEncyclopediaSubFilterItemText)
X(pEncyclopediaFilterQuestText)
X(pEncyclopediaSubFilterQuestText)
X(pEncyclopediaShortCharacterText)
X(pEncyclopediaHelpCharacterText)
X(pEncyclopediaShortInventoryText)
X(BoxFilter)
X(pOtherButtonsText)
X(pOtherButtonsHelpText)
X(QuestDescText)
X(FactDescText)
X(iEditorItemStatsButtonsText)
X(FaceDirs)
X(iEditorMercsToolbarText)
X(iEditorBuildingsToolbarText)
X(iEditorItemsToolbarText)
X(iEditorMapInfoToolbarText)
X(iEditorOptionsToolbarText)
X(iEditorTerrainToolbarText)
X(iEditorTaskbarInternalText)
X(iRenderMapEntryPointsAndLightsText)
X(iBuildTriggerNameText)
X(iRenderDoorLockInfoText)
X(iRenderEditorInfoText)
X(iUpdateBuildingsInfoText)
X(iRenderDoorEditingWindowText)
X(pInitEditorItemsInfoText)
X(pDisplayItemStatisticsTex)
X(pUpdateMapInfoText)
X(gszScheduleActions)
X(zDiffNames)
X(EditMercStat)
X(EditMercOrders)
X(EditMercAttitudes)
X(pDisplayEditMercWindowText)
X(pCreateEditMercWindowText)
X(pDisplayBodyTypeInfoText)
X(pUpdateMercsInfoText)
X(pRenderMercStringsText)
X(pClearCurrentScheduleText)
X(pCopyMercPlacementText)
X(pPasteMercPlacementText)
X(pEditModeShutdownText)
X(pHandleKeyboardShortcutsText)
X(pPerformSelectedActionText)
X(pWaitForHelpScreenResponseText)
X(pAutoLoadMapText)
X(pShowHighGroundText)
X(pUpdateItemStatsPanelText)
X(pSetupGameTypeFlagsText)
X(pSetupGunGUIText)
X(pSetupArmourGUIText)
X(pSetupExplosivesGUIText)
X(pSetupTriggersGUIText)
X(pCreateSummaryWindowText)
X(pRenderSectorInformationText)
X(pRenderItemDetailsText)
X(pRenderSummaryWindowText)
X(pUpdateSectorSummaryText)
X(pSummaryLoadMapCallbackText)
X(pReportErrorText)
X(pRegenerateSummaryInfoForAllOutdatedMapsText)
X(pSummaryUpdateCallbackText)
X(pApologizeOverrideAndForceUpdateEverythingText)
X(pDisplaySelectionWindowGraphicalInformationText)
X(pDisplaySelectionWindowButtonText)
X(wszSelType)
X(gzNewLaptopMessages)
X(zNewTacticalMessages)
X(gszAimPages)
X(zGrod)
X(pCreditsJA2113)
X(ShortItemNames)
X(ItemNames)
X(AmmoCaliber)
X(BobbyRayAmmoCaliber)
X(WeaponType)
X(Message)
X(TeamTurnString)
X(pMilitiaControlMenuStrings)
X(pTraitSkillsMenuStrings)
X(pTraitSkillsMenuDescStrings)
X(pTraitSkillsDenialStrings)
X(pSkillMenuStrings)
X(pSnitchMenuStrings)
X(pSnitchMenuDescStrings)
X(pSnitchToggleMenuStrings)
X(pSnitchToggleMenuDescStrings)
X(pSnitchSectorMenuStrings)
X(pSnitchSectorMenuDescStrings)
X(pPrisonerMenuStrings)
X(pPrisonerMenuDescStrings)
X(pSnitchPrisonExposedStrings)
X(pSnitchGatheringRumoursResultStrings)
X(pAssignMenuStrings)
X(pTrainingStrings)
X(pTrainingMenuStrings)
X(pAttributeMenuStrings)
X(pVehicleStrings)
X(pShortAttributeStrings)
X(pLongAttributeStrings)
X(pContractStrings)
X(pAssignmentStrings)
X(pConditionStrings)
X(pCountryNames)
X(pTownNames)
X(pPersonnelScreenStrings)
X(pPersonnelRecordsHelpTexts)
X(pPersonnelTitle)
X(pUpperLeftMapScreenStrings)
X(pTacticalPopupButtonStrings)
X(pSquadMenuStrings)
X(pDoorTrapStrings)
X(pLongAssignmentStrings)
X(pContractExtendStrings)
X(pMapScreenMouseRegionHelpText)
X(pPersonnelAssignmentStrings)
X(pNoiseVolStr)
X(pNoiseTypeStr)
X(pDirectionStr)
X(pRemoveMercStrings)
X(sTimeStrings)
X(pLandTypeStrings)
X(pGuardMenuStrings)
X(pOtherGuardMenuStrings)
X(pInvPanelTitleStrings)
X(pPOWStrings)
X(pMilitiaString)
X(pMilitiaButtonString)
X(pEpcMenuStrings)
X(pRepairStrings)
X(sPreStatBuildString)
X(sStatGainStrings)
X(pHelicopterEtaStrings)
X(pHelicopterRepairRefuelStrings)
X(sMapLevelString)
X(gsLoyalString)
X(gsUndergroundString)
X(gsTimeStrings)
X(sFacilitiesStrings)
X(pMapPopUpInventoryText)
X(pwTownInfoStrings)
X(pwMineStrings)
X(pwMiscSectorStrings)
X(pMapInventoryErrorString)
X(pMapInventoryStrings)
X(pMapScreenFastHelpTextList)
X(pMovementMenuStrings)
X(pUpdateMercStrings)
X(pMapScreenBorderButtonHelpText)
X(pMapScreenInvenButtonHelpText)
X(pMapScreenBottomFastHelp)
X(pMapScreenBottomText)
X(pMercDeadString)
X(pSenderNameList)
X(pTraverseStrings)
X(pNewMailStrings)
X(pDeleteMailStrings)
X(pEmailHeaders)
X(pEmailTitleText)
X(pFinanceTitle)
X(pFinanceSummary)
X(pFinanceHeaders)
X(pTransactionText)
X(pTransactionAlternateText)
X(pMoralStrings)
X(pSkyriderText)
X(pLeftEquipmentString)
X(pMapScreenStatusStrings)
X(pMapScreenPrevNextCharButtonHelpText)
X(pEtaString)
X(pShortVehicleStrings)
X(pTrashItemText)
X(pMapErrorString)
X(pMapPlotStrings)
X(pMiscMapScreenMouseRegionHelpText)
X(pMercHeLeaveString)
X(pMercSheLeaveString)
X(pImpPopUpStrings)
X(pImpButtonText)
X(pExtraIMPStrings)
X(pDayStrings)
X(pMercContractOverStrings)
X(pFilesTitle)
X(pFilesSenderList)
X(pHistoryLocations)
X(pHistoryHeaders)
X(pHistoryTitle)
X(pShowBookmarkString)
X(pWebPagesTitles)
X(pWebTitle)
X(pPersonnelString)
X(pErrorStrings)
X(pDownloadString)
X(pBookmarkTitle)
X(pBookMarkStrings)
X(pLaptopIcons)
X(gsAtmStartButtonText)
X(pPersonnelTeamStatsStrings)
X(pPersonnelCurrentTeamStatsStrings)
X(pPersonelTeamStrings)
X(pPersonnelDepartedStateStrings)
X(pMapHortIndex)
X(pMapVertIndex)
X(pMapDepthIndex)
X(pLaptopTitles)
X(pMilitiaConfirmStrings)
X(pDeliveryLocationStrings)
X(pSkillAtZeroWarning)
X(pIMPBeginScreenStrings)
X(pIMPFinishButtonText)
X(pIMPFinishStrings)
X(pIMPVoicesStrings)
X(pDepartedMercPortraitStrings)
X(pPersTitleText)
X(pPausedGameText)
X(zOptionsToggleText)
X(zOptionsScreenHelpText)
X(pDoctorWarningString)
X(pMilitiaButtonsHelpText)
X(pMapScreenJustStartedHelpText)
X(pLandMarkInSectorString)
X(gzMercSkillText)
X(gzMercSkillTextNew)
X(gzNonPersistantPBIText)
X(gzMiscString)
X(pBullseyeStrings)
X(wMapScreenSortButtonHelpText)
X(pNewNoiseStr)
X(pTauntUnknownVoice)
X(gzLateLocalizedString)
X(gzCWStrings)
X(gzTooltipStrings)
X(pSkillTraitBeginIMPStrings)
X(sgAttributeSelectionText)
X(pCharacterTraitBeginIMPStrings)
X(gzIMPCharacterTraitText)
X(gzIMPAttitudesText)
X(gzIMPColorChoosingText)
X(sColorChoiceExplanationTexts)
X(gzIMPDisabilityTraitText)
X(gzIMPDisabilityTraitEmailTextDeaf)
X(gzIMPDisabilityTraitEmailTextShortSighted)
X(gzIMPDisabilityTraitEmailTextHemophiliac)
X(gzIMPDisabilityTraitEmailTextAfraidOfHeights)
X(gzIMPDisabilityTraitEmailTextSelfHarm)
X(sEnemyTauntsFireGun)
X(sEnemyTauntsFireLauncher)
X(sEnemyTauntsThrow)
X(sEnemyTauntsChargeKnife)
X(sEnemyTauntsRunAway)
X(sEnemyTauntsSeekNoise)
X(sEnemyTauntsAlert)
X(sEnemyTauntsGotHit)
X(sEnemyTauntsNoticedMerc)
X(sSpecialCharacters)
X(gzFacilityErrorMessage)
X(gzFacilityAssignmentStrings)
X(gzFacilityRiskResultStrings)
X(gzNCTHlabels)
X(gzMapInventorySortingMessage)
X(gzMapInventoryFilterOptions)
X(gzMercCompare)
X(pAntiHackerString)
X(pMessageStrings)
X(gzMoneyAmounts)
X(gzProsLabel)
X(gzConsLabel)
X(gzItemDescTabButtonText)
X(gzItemDescTabButtonShortText)
X(gzItemDescGenHeaders)
X(gzItemDescGenIndexes)
X(gConditionDesc)
X(gTemperatureDesc)
X(gFoodDesc)
X(gzWeaponStatsFasthelpTactical)
X(gzMiscItemStatsFasthelp)
X(gzUDBButtonTooltipText)
X(gzUDBHeaderTooltipText)
X(gzUDBGenIndexTooltipText)
X(gzUDBAdvIndexTooltipText)
X(szUDBGenWeaponsStatsTooltipText)
X(szUDBGenWeaponsStatsExplanationsTooltipText)
X(szUDBGenArmorStatsTooltipText)
X(szUDBGenArmorStatsExplanationsTooltipText)
X(szUDBGenAmmoStatsTooltipText)
X(szUDBGenAmmoStatsExplanationsTooltipText)
X(szUDBGenExplosiveStatsTooltipText)
X(szUDBGenExplosiveStatsExplanationsTooltipText)
X(szUDBGenCommonStatsTooltipText)
X(szUDBGenCommonStatsExplanationsTooltipText)
X(szUDBGenSecondaryStatsTooltipText)
X(szUDBGenSecondaryStatsExplanationsTooltipText)
X(szUDBAdvStatsTooltipText)
X(szUDBAdvStatsExplanationsTooltipText)
X(szUDBAdvStatsExplanationsTooltipTextForWeapons)
X(sKeyDescriptionStrings)
X(gzHiddenHitCountStr)
X(zVehicleName)
X(pVehicleSeatsStrings)
X(szCovertTextStr)
X(gPowerPackDesc)
X(szCorpseTextStr)
X(szFoodTextStr)
X(szPrisonerTextStr)
X(szMTATextStr)
X(szInventoryArmTextStr)
X(pExitingSectorHelpText)
X(InsContractText)
X(InsInfoText)
X(MercAccountText)
X(MercAccountPageText)
X(MercInfo)
X(MercNoAccountText)
X(MercHomePageText)
X(sFuneralString)
X(sFloristText)
X(sOrderFormText)
X(sFloristGalleryText)
X(sFloristCards)
X(BobbyROrderFormText)
X(BobbyRText)
X(BobbyRFilter)
X(BobbyRaysFrontText)
X(AimSortText)
X(AimPolicyText)
X(AimMemberText)
X(CharacterInfo)
X(VideoConfercingText)
X(AimPopUpText)
X(AimLinkText)
X(AimHistoryText)
X(AimFiText)
X(AimAlumniText)
X(AimScreenText)
X(AimBottomMenuText)
X(zMarksMapScreenText)
X(gpStrategicString)
X(gpGameClockString)
X(SKI_Text)
X(SkiAtmText)
X(gzSkiAtmText)
X(SkiMessageBoxText)
X(zSaveLoadText)
X(zOptionsText)
X(z113FeaturesScreenText)
X(z113FeaturesToggleText)
X(z113FeaturesHelpText)
X(z113FeaturesPanelText)
X(gzGIOScreenText)
X(gzMPJHelpText)
X(gzMPJScreenText)
X(gzMPHScreenText)
X(gzMPSScreenText)
X(gzMPCScreenText)
X(gszMPEdgesText)
X(gszMPTeamNames)
X(gzMPChatToggleText)
X(gzMPChatboxText)
X(gzHelpScreenText)
X(gzLaptopHelpText)
X(gzMoneyWithdrawMessageText)
X(gzCopyrightText)
X(BrokenLinkText)
X(gzBobbyRShipmentText)
X(zGioDifConfirmText)
X(gzCreditNames)
X(gzCreditNameTitle)
X(gzCreditNameFunny)
X(New113Message)
X(New113MERCMercMailTexts)
X(MissingIMPSkillsDescriptions)
X(New113AIMMercMailTexts)
X(New113HAMMessage)
X(gzTransformationMessage)
X(NewInvMessage)
X(MPServerMessage)
X(MPClientMessage)
X(gszMPMapscreenText)
X(Additional113Text)
X(ranks)
X(gszPocketPopupText)
X(gLbeStatsDesc)
X(szBackgroundText_Flags)
X(szBackgroundText_Value)
X(szSoldierClassName)
X(szBackgroundTitleText)
X(szPersonalityTitleText)
X(szPersonalityDisplayText)
X(szPersonalityHelpText)
X(szRaceText)
X(szAppearanceText)
X(szRefinementText)
X(szRefinementTextTypes)
X(szNationalityText)
X(szNationalityTextAdjective)
X(szNationalityText_Special)
X(szCareLevelText)
X(szRacistText)
X(szSexistText)
X(szCampaignHistoryWebSite)
X(szCampaignHistoryDetail)
X(szCampaignHistoryTimeString)
X(szCampaignHistoryMoneyTypeString)
X(szCampaignHistoryConsumptionTypeString)
X(szCampaignHistoryResultString)
X(szCampaignHistoryImportanceString)
X(szCampaignHistoryWebpageString)
X(szCampaignStatsOperationPrefix)
X(szCampaignStatsOperationSuffix)
X(szMercCompareWebSite)
X(szMercCompareEventText)
X(szWHOWebSite)
X(szPMCWebSite)
X(szTacticalInventoryDialogString)
X(szTacticalCoverDialogString)
X(szTacticalCoverDialogPrintString)
X(szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_DENY)
X(szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_AGREE)
X(szDynamicDialogueText_DOST_SIDEWITH_VICTIM)
X(szDynamicDialogueText_DOST_SIDEWITH_CAUSE)
X(szDynamicDialogueText_DOST_INTERJECTOR_DIALOGUESELECTION_SHORTTEXT)
X(szDynamicDialogueText_GenderText)
X(szDiseaseText)
X(szSpyText)
X(szFoodText)
X(szIMPGearWebSiteText)
X(szIMPGearPocketText)
X(szMilitiaStrategicMovementText)
X(szEnemyHeliText)
X(szFortificationText)
X(szMilitiaWebSite)
X(szIndividualMilitiaBattleReportText)
X(szIndividualMilitiaTraitRequirements)
X(szIdividualMilitiaWebsiteText)
X(szIdividualMilitiaWebsiteFilterText_Dead)
X(szIdividualMilitiaWebsiteFilterText_Rank)
X(szIdividualMilitiaWebsiteFilterText_Origin)
X(szIdividualMilitiaWebsiteFilterText_Sector)
X(szNonProfileMerchantText)
X(szWeatherTypeText)
X(szSnakeText)
X(szSMilitiaResourceText)
X(szInteractiveActionText)
X(szLaptopStatText)
X(szGearTemplateText)
X(szIntelWebsiteText)
X(szIntelText)
X(szChatTextSpy)
X(szChatTextEnemy)
X(szMilitiaText)
X(szFactoryText)
X(szTurncoatText)
X(szRebelCommandText)
X(szRebelCommandHelpText)
X(szRebelCommandAdminActionsText)
X(szRebelCommandDirectivesText)
X(szRebelCommandAgentMissionsText)
X(szRobotText)
X(gzIMPSkillTraitsText)
X(gzIMPSkillTraitsTextNewMajor)
X(gzIMPSkillTraitsTextNewMinor)
X(gzIMPMajorTraitsHelpTextsAutoWeapons)
X(gzIMPMajorTraitsHelpTextsHeavyWeapons)
X(gzIMPMajorTraitsHelpTextsSniper)
X(gzIMPMajorTraitsHelpTextsRanger)
X(gzIMPMajorTraitsHelpTextsGunslinger)
X(gzIMPMajorTraitsHelpTextsMartialArts)
X(gzIMPMajorTraitsHelpTextsSquadleader)
X(gzIMPMajorTraitsHelpTextsTechnician)
X(gzIMPMajorTraitsHelpTextsDoctor)
X(gzIMPMajorTraitsHelpTextsCovertOps)
X(gzIMPMajorTraitsHelpTextsRadioOperator)
X(gzIMPMajorTraitsHelpTextsNone)
X(gzIMPMinorTraitsHelpTextsAmbidextrous)
X(gzIMPMinorTraitsHelpTextsMelee)
X(gzIMPMinorTraitsHelpTextsThrowing)
X(gzIMPMinorTraitsHelpTextsStealthy)
X(gzIMPMinorTraitsHelpTextsNightOps)
X(gzIMPMinorTraitsHelpTextsAthletics)
X(gzIMPMinorTraitsHelpTextsBodybuilding)
X(gzIMPMinorTraitsHelpTextsDemolitions)
X(gzIMPMinorTraitsHelpTextsTeaching)
X(gzIMPMinorTraitsHelpTextsScouting)
X(gzIMPMinorTraitsHelpTextsSnitch)
X(gzIMPMajorTraitsHelpTextsSurvival)
X(gzIMPMinorTraitsHelpTextsNone)
X(gzIMPOldSkillTraitsHelpTexts)
X(gzIMPNewCharacterTraitsHelpTexts)
X(gzIMPDisabilitiesHelpTexts)
X(gzIMPProfileCostText)
X(zGioNewTraitsImpossibleText)
X(gzIronManModeWarningText)
X(gzDisplayCoverText)
X(ItemPickupHelpPopup)
X(TacticalStr)
X(LargeTacticalStr)
X(zDialogActions)
X(zDealerStrings)
X(zTalkMenuStrings)
X(gMoneyStatsDesc)
X(gWeaponStatsDesc)
X(zHealthStr)
X(szDynamicDialogueText)
X(pContractButtonString)
X(pUpdatePanelButtons)
X(gzIntroScreen)
X(sRepairsDoneString)