# Future work

## Localization

For information about the future work related to localization, see
[Future work](./localization/future_work.md).

## Internationalization preferences

-   Migrate `fuchsia.intl.PropertyProvider` change watcher API to a
    [hanging get](/docs/concepts/api/fidl.md#hanging-get) design and migrate all
    existing clients.

-   Instead of having a single `fuchsia.intl.PropertyProvider` implemented by
    `intl_services`, demonstrate best practices for embedding custom
    `PropertyProvider`s in [Session](/docs/concepts/session/introduction.md)
    implementations, ideally with multi-user use cases.

-   Wire up Dart's `Platform.localeName` (blocked by Dart SDK
    [#37586](https://github.com/dart-lang/sdk/issues/37586)).

-   Wire up and verify Chromium's
    [`navigator.language` and `navigator.languages`][navigator-languages].

## Internationalization UI

-   For the workstation product, design and implement an i18n settings UI.

## Fonts

-   Complete support for ephemeral fonts, i.e. loading fonts as ephemeral
    packages that are temporarily cached. This requires production support for
    ephemeral packages in Fuchsia.

    -   Configure a set of ephemeral fonts to cover all common scripts supported
        by Unicode. (On target devices with lots of storage space, these don't
        necessarily need to be ephemeral.)

-   Add support for font subsetting by allowing single typefaces to be split
    across multiple files, with metadata mapping code point ranges to files. For
    large fonts, this would improve loading performance.

-   Make font service multi-threaded to better handle workloads where a single
    component is displaying text in many fonts at once, or when multiple
    components are being displayed side by side.

-   Use ICU4X to implement real language and script ID matching in font service.

-   Implement support for async local font loading in Flutter.

-   Implement support for async local font loading in Chromium.

-   For workstation product, design and implement a font management UI for
    reviewing and testing out fonts available in a given build.

## Time zones

-   Finish removing `fuchsia.deprecatedtimezone.Timezone`.

-   Implement a FIDL service that provides a listing of time zone IDs and
    localized display names. This will initially be used in the workstation
    product's settings UI.

## Input methods

-   Design and implement APIs for switching keyboard layouts.

-   For workstation product, design and implement UI for switching keyboard
    layouts.

<!--xrefs-->

[navigator-languages]: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages
