• Which the release of FS2020 we see an explosition of activity on the forun and of course we are very happy to see this. But having all questions about FS2020 in one forum becomes a bit messy. So therefore we would like to ask you all to use the following guidelines when posting your questions:

    • Tag FS2020 specific questions with the MSFS2020 tag.
    • Questions about making 3D assets can be posted in the 3D asset design forum. Either post them in the subforum of the modelling tool you use or in the general forum if they are general.
    • Questions about aircraft design can be posted in the Aircraft design forum
    • Questions about airport design can be posted in the FS2020 airport design forum. Once airport development tools have been updated for FS2020 you can post tool speciifc questions in the subforums of those tools as well of course.
    • Questions about terrain design can be posted in the FS2020 terrain design forum.
    • Questions about SimConnect can be posted in the SimConnect forum.

    Any other question that is not specific to an aspect of development or tool can be posted in the General chat forum.

    By following these guidelines we make sure that the forums remain easy to read for everybody and also that the right people can find your post to answer it.

MSFS Localization files (*.locPak)

Localization files are text files which contain various informations displayed as text in MSFS and sometimes sent to vocal Azure text-to-speech. They cover a wide range of thing such as loading tips, ATC comms, menu items, etc...
The main localization files are located in the fs-base folder (.../Official/OneStore/fs-base), but many others can be found elsewhere such as in Aircraft folders or Landing Challenges folders.
Generic structure:
  "LocalisationPackage": {
    "Language": "en-US",
    "Strings": {

I've been trying those last three days to tame them, but it's not going as good as expected... From here I'll focus on Airport informations stored in these files.

In the fs-base localization files are stored 3 different airport informations:

1. An AIRPORTS directory that seems to be used in the world map. It has all 37000+ MSFS stock airports and account for the majority of the files records.

Sample record:
      "AIRPORTSZ.ZBAA.city": "Beijing",
      "AIRPORTSZ.ZBAA.name": "Beijing Capital",
      "AIRPORTSZ.ZBAA.state": "NO STATE",
Only text information here, which is not meant to be spoken by the sim via text-to-speech.
It is divided in several ICAO blocks: AIRPORTS S Z being used for all airports from ICAI block S to ICAO clock Z.

2. An AGENT_NAME used to designate ATC agents and used for user/ATC vocal interactions ("ATCCOM").

Sample record: One text string meant to be displayed on screen, and one text-to-speech (tts) string meant to be processed by Azure:
      "ATCCOM.AGENT_NAME HANGZHOU.0.text": "Hangzhou",
      "ATCCOM.AGENT_NAME HANGZHOU.0.tts": "Hangzhou",

These agent names are intended to match those in scenery bgl, which are defined like this in scenery project xml source files:
        <Com frequency="123.65" type="TOWER" name="HANGZHOU TOWER"/>
        <Com frequency="118.30" type="TOWER" name="HANGZHOU TOWER"/>
        <Com frequency="127.25" type="ATIS" name="HANGZHOU ATIS"/>
        <Com frequency="125.55" type="APPROACH" name="HANGZHOU APPROACH"/>
        <Com frequency="126.05" type="APPROACH" name="HANGZHOU APPROACH"/>
        <Com frequency="121.65" type="GROUND" name="HANGZHOU GROUND"/>
        <Com frequency="121.725" type="GROUND" name="HANGZHOU GROUND"/>
        <Com frequency="121.95" type="CLEARANCE" name="HANGZHOU DELIVERY"/>

No match is done in this example since the "HANGZHOU" ATC Agent string doesn't strictly match any of the Com frequency name strings in the xml. When tuning on 121.95 I hear aircrafts calling "Clearance Delivery" instead of "Hangzhou Clearance Delivery".
To fix this you would add the following record to the fs-base localization packages:

3. An ATCCOM.AIRPORT string meant to convert any ICAO designator into airport and/or city names.

Sample record: One text string for display, for tts string for vocal speech by Azure
      "ATCCOM.AIRPORT ZSHC.0.text": "Hangzhou",
      "ATCCOM.AIRPORT ZSHC.0.tts": "Hangzhou",
Without this one would hear "requesting IFR clearance to Z S H C" instead of "requesting IFR clearance to Hangzhou".


Many airports miss the ATCCOM.AIRPORT record and get they ICAO spelled by ATC instead of using a proper name: only 3096 airports (out of 37000) are listed in this section. So I've been amending the stock fs-base files with an airport database I made for myself. Also, I changed many existing records with a more suitable name to my taste (like LFLL being called Lyon St Ex instead of St Exupéry). I ended up with 535 updated airport records and 2520 new airports records, now having globally almost all commercial airports covered.
Of course I generated an updated layout.json in the fs-base folder to validate my altered localization packs.

- Updated airports do work properly. For example I replaced "ATCCOM.AIRPORT ZGSZ.0.tts": "Huangtian" with "ATCCOM.AIRPORT ZGSZ.0.tts": "Shenzhen" and now MSFS is correctly naming ZGSZ as "Shenzhen" during ATC comms.
- New airports don't work. For example ZBAD Beijing Daxing is still spelled as "Z B A D". Even airports already existing in stock MSFS with a correct ICAO and present in the first AIRPORTS directory (part 1) are not called properly: Guiyang ZUGY and Miangyang ZUMY are still spelled "Z U G Y" and "Z U M Y".
- Another potential issue is that amending stock files should be avoided at any cost: they would be overwrited at each sim update/patch, and they could conflict with other 3rd party work.

I troubleshooted a lot, including amending all 10 localization files with the same exact same content, but still the new records seem ignored.
- Could Azure tts ignore those new entries and only process existing, pre-defined ones by Asobo ?
- Is there a master file / master list somewhere in MSFS install that would unlock those new records ?
I'm totally clueless abou this issue...

But I went on: since some other packages have their own localization files, and since it's not recommended to alter stock files, I decided to add my own localization files to an airport project I'm working on.
So I added my missing ATCCOM.AGENTs for Hangzhou, in a separate set of files that I put in my airport package folder:

  "LocalisationPackage": {
    "Language": "en-US",
    "Strings": {
      "AIRPORTSZ.ZSHC.city": "Hangzhou",
      "AIRPORTSZ.ZSHC.name": "Xiaoshan",
      "AIRPORTSZ.ZSHC.state": "NO STATE",
      "ATCCOM.AGENT_NAME HANGZHOU TOWER.0.text": "Hangzhou",
      "ATCCOM.AGENT_NAME HANGZHOU TOWER.0.tts": "Hangzhou",
      "ATCCOM.AGENT_NAME HANGZHOU GROUND.0.text": "Hangzhou",
      "ATCCOM.AGENT_NAME HANGZHOU GROUND.0.tts": "Hangzhou",

I even got further with chinese and russian localizations, since I had them set:
      "ATCCOM.AGENT_NAME HANGZHOU TOWER.0.text": "Ханчжоу",
      "ATCCOM.AGENT_NAME HANGZHOU TOWER.0.tts": "Hangzhou",
      "ATCCOM.AGENT_NAME HANGZHOU TOWER.0.tts": "Hangzhou",

But this doesn't work: updating json files and reloading the sim won't help, with still no mention of "Hangzhou" in ATC comms with Tower, Ground nor Delivery.

It's really disapointing since I believe that the virtual file system should favor this idea of adding separately small pieces of amends/additions instead of messing with one big stock file. Then every 3-rd party developer could add customized localizations for their products in an easy and clean way.

It's really frustrating, I must have missed something... Do any of you have any idea about this ? Is it somehow locked at Azure level (which would be strange since it seems to proceed any user or AI callsign with no difficulty) ?
Last edited:
I was looking for a solution for a while but no idea of how it work. Some unique airport name can not be spelled correctly. At least you find something. Will try to dig it according to your finding when I have time.