How to Add Localized Forms in FontForge

This guide explains how to implement the OpenType Localized Forms (locl) feature in FontForge. You will learn how to prepare language-specific glyph variants, configure the proper substitution lookups in the Font Info panel, and assign the appropriate script and language tags to ensure your font renders correct regional characters automatically.

1. Create the Localized Glyph Variants

Before configuring the OpenType feature, you must create the alternative glyphs needed for specific languages (such as Romanian comma-accent characters or Turkish dotless i forms).

  1. Open your font project in FontForge.
  2. Select an empty slot in the font grid or go to Encoding > Add Encoding Slots.
  3. Create the alternate glyph. For clarity and OpenType conventions, assign a descriptive name such as scedilla.loclROU or i.loclTRK.
  4. Right-click the new slot, select Glyph Info, and update the Glyph Name.

2. Open the Lookups Panel

OpenType features in FontForge are managed through the Lookups interface.

  1. Go to the top menu and select Element > Font Info (or press Ctrl + Shift + F / Cmd + Shift + F).
  2. In the left sidebar, click on Lookups.
  3. At the top of the Lookups window, select the GSUB (Glyph Substitution) tab.

3. Add a Single Substitution Lookup

The localized form feature typically relies on a 1-to-1 glyph replacement.

  1. Click the Add Lookup button.
  2. Set the Type dropdown to Single Substitution.
  3. In the feature table, choose or type locl Localized Forms.
  4. In the Script and Language list below, click New.
  5. Select the relevant Script (e.g., latn for Latin).
  6. Select the target Language (e.g., ROM for Romanian, MOL for Moldavian, or TRK for Turkish).
  7. Click OK to save the lookup settings.

4. Create the Subtable and Map the Glyphs

Once the lookup is established, you must populate the subtable with the specific glyph mappings.

  1. Select the newly created locl lookup in the list and click Add Subtable.
  2. Accept the default subtable name or give it a custom name, then click OK.
  3. In the mapping window that appears, you will define the base glyph and its replacement:
    • Under Base Glyph Name, enter the standard character (e.g., scedilla).
    • Under Replacement Glyph Name, enter the name of your localized alternate (e.g., scedilla.loclROU).
  4. Repeat this for all glyphs that require alternate forms for the selected language.
  5. Click OK to close the subtable dialog, then click OK in the Font Info window to apply your changes.

5. Generate and Test the Font

  1. Go to File > Generate Fonts... to export the font as an OpenType font (OTF or TTF).
  2. Test the output in software that supports OpenType language tagging (such as Adobe InDesign, web browsers using the CSS lang attribute, or HarfBuzz-based tools) to verify that the alternate glyph triggers when the corresponding language is applied.