# Internationalization, localization, and input methods in Fuchsia

This is the entry page to the internationalization (I18N), localization (L10N)
and input methods (IM) subsystems in Fuchsia.

## Introduction

Modern user-facing operating systems need to support users across a variety of
regions, languages, and cultures. Localization and internationalization are
critical to this goal.

**Localization** (L10N) is the process of translating user interfaces into local
languages and conventions. This includes text and image content, fonts, regional
variations for components like date, time, text and imagery direction, currency,
and number formats.

**Internationalization** (I18N) is the process of designing locale-independent
software that makes _localization_ in a wide range of languages, regions, and
cultures easy.

Typically, localization refers to the work done by language experts, designers,
tech writers, and other content producers. Internationalization refers to the
work done by software engineers.

Note: Currently, Fuchsia-based products use I18N and L10N only in the context
of Accessibility's screen reader. Specifically, the L10N data is fed into
the semantic data collected by Accessibility Manager and surfaced to the user
with text-to-speech.

## Fuchsia's approach {#fuchsias-approach}

Because Fuchsia is designed to be extensible and to flexibly
support a variety of runtimes and target products, the core operating system
does not strictly specify how to implement i18n and l10n.

However, Fuchsia does include some basic conventions, shared libraries, and
services for i18n/l10n, and uses these in the components and runners that are
typically distributed with Fuchsia.

The following topics discuss the development of Fuchsia applications and
the operating system itself, in multi-language environments.

-   **[Internationalization preferences](i18n_preferences.md):** Fuchsia has
    guidelines for how to encode, read, and write i18n settings.

-   **[ICU library](icu.md):** In-tree components that need common i18n
    functionality such as formatting and parsing dates, times, and numbers,
    working with time zones, displaying bidirectional text, or selecting locales
    and languages can use the third-party ICU library.

    Out-of-tree components can also use ICU, but they need to bring
    their own copy of ICU because the library is not part of the official
    Fuchsia SDK.

-   **[ICU time zone data](icu_data.md):** Both in-tree _and_ out-of-tree
    components that use ICU to deal with dates and times should consider using
    Fuchsia's shared ICU time zone data to ensure consistent time among
    components.

-   **Localizing components:** Fuchsia offers some basic guidance a
    [string lookup library and workflow](localization/message_translation.md)
    for C++ components.

-   **[Fonts](fonts):** Fuchsia provides a FIDL service for loading font assets,
    with an API that is particularly useful for `freetype2` clients.

<!--xrefs-->

