General Information : Q: How can I tell what Message Catalog Files are required to ship with my IC'ed application?

Q: How can I tell what Message Catalog Files are required to ship with my IC'ed application?
Problem
I have packaged my runtime application as a set of image components (ICs), but I don’t know which message catalog files I need to deploy with the ICs.
Solution
The following script can be run to determine the .cat and .mpr message files that are needed by an IC'd image at runtime. It will show a list of all the IC packaging instructions that are currently loaded. When you select a packaging instruction, the required runtime message files will be listed on the Transcript.
| appCollection catFiles mprFiles instructionNames instructionName instructionClass work |
 
instructionNames := (EpAbstractPackagingInstructions withAllSubclasses
collect: [ :ea | ea name asString]) asSortedCollection asArray.
instructionName := CwListPrompter new
title: 'Find .cat and .mpr files required by the selected IC';
items: instructionNames;
prompt.
instructionName size = 0 ifTrue:[ ^self ].
instructionClass := Smalltalk classAt: instructionName ifAbsent: [^self].
appCollection := Set new.
catFiles := Set new.
mprFiles := Set new.
instructionClass actualIncludedSubApplicationNames do: [:eachApp|
appCollection add: (eachApp asClass rootApplication)].
instructionClass prerequisiteICs do: [:eachICInstructionClass|
(eachICInstructionClass asClass) actualIncludedSubApplicationNames do: [:eachApp|
appCollection add: (eachApp asClass rootApplication)]].
 
appCollection do: [:eachApp | |poolNames mprName|
poolNames := eachApp definedPoolNames.
poolNames do: [ :eachPoolName| |pool catName|
(pool := (Smalltalk at: eachPoolName ifAbsent:[])) epIsPoolDictionary
ifTrue:[(catName := (pool at: '!CATALOGNAME' ifAbsent: [])) isNil
ifFalse: [catFiles add: (catName,'.cat')]]].
(mprName := eachApp abtNlsRawFilename) isEmpty
ifFalse: [mprFiles add: (AbtNLSCoordinator resolveLanguageMappingCharacter:mprName)]].
work := Transcript bringToFront.
work cr;
nextPutAll: '**** The required message files for ',instructionClass name,' ****';
cr;
cr;
nextPutAll: 'Cat files:';
cr.
catFiles isEmpty
ifTrue: [work tab; nextPutAll: 'No .cat files needed'; cr]
ifFalse: [catFiles asSortedCollection do: [:each| work tab; nextPutAll: each; cr]].
work cr;
nextPutAll: 'Mpr files:';
cr.
mprFiles isEmpty
ifTrue: [work tab; nextPutAll: 'No .mpr files needed'; cr]
ifFalse: [mprFiles asSortedCollection do: [:each| work tab; nextPutAll: each; cr]].