These files store localized stuff in German, English and French.
Encoding should be normal ANSI (German umlaut ü corresponds to 0xFC).
Every file starts with a 6-byte header:
LL LH 00 00 ML MH
where the bytes are:
LL: Length low-byte
LH: Length hi-byte
ML: Msg count low-byte
MH: Msg count hi-byte
Length and message count are stored in little-endian order, they are two bytes (16 bit) long. This allows a maximum file length of 65535 bytes and 65535 messages. One message is minimum 4 bytes long, though, so you can store 16383 messages in one file.
The message count may not always be correct, fully parse the file to check. And while you're rebuilding a file, please build the correct message count header.
It may be (but has not been seen in a UI locale file and so can't be confirmed), that the file length is 4 bytes (32 bit) in little-endian, allowing 4294967295 bytes or roughly 43 MB of text. DOS is 16-bit though, so a 32-byte file length could not be stored by the OS.
Messages are concatenated directly after the header. Their header is two bytes long:
LL LH
where LL/LH is the byte count of the message including the termination nullbyte. As with the header counter bytes, the length is little-endian, allowing 65535 bytes per message (practically the limit is 65532 so that the length of the message does not exceed the file length).
The message is null-terminated (single nullbyte).