Localization, Internationalization and Multilingualization

Localization (l10n) and internationalization (i18n) support in Ultramarine Linux is crucial as half of the project team speaks something other than English natively. This page contains details on how i18n works and how it can be set up on Ultramarine.

Fonts

Ultramarine should come with fonts for most if not all languages by default. Fonts for CJKV, Thai, Indic languages are installed out of the box. If you find any glyphs supported by Unicode not rendered correctly, file a bug report.

Font Priorities

Chinese users might experience issues where Japanese fonts are preferred over Chinese ones simply because the locale code ja_JP is before zh_* when sorted alphabetically. To solve this issue, edit ~/.config/fontconfig/fonts.conf (or /etc/fonts/local.conf for global changes):

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans CJK TW</family>
      <family>Noto Sans</family>
      <family>HanaMinA</family>
    </prefer>
  </alias>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Serif CJK TW</family>
      <family>Noto Serif</family>
      <family>HanaMinA</family>
    </prefer>
  </alias>
</fontconfig>

Inputting in another language

You may change your key maps / keyboard layout in the settings applet. Refer to documentations for your chosen Desktop Environment (DE) or Window Manager (WM) for more details.

IMFs, IMEs and IMs

Special tools are required to type in CJKV (Chinese, Japanese, Korean and Vietnamese) and other specific languages.

Input Method Frameworks (IMFs) are software that enable users to type in numerous different input methods. They provide a unified experience and user interface between IMEs and the DE/WM.

Input Method Editors (IMEs) are software that convert user inputs into actual texts in different languages.

Input Methods (IMs) refer to the actual conversion between the input keys and the output text. IMs are not actual software; there must be an IME that intercepts the inputted keys and map them into output texts, where the mapping is specified by the IM.

As an example, a Japanese KDE user would install fcitx5-mozc in order to type Japanese. In this case, Fcitx5 is the IMF, Mozc is the IME, and the IM can be Romaji or Kana input depending on the user’s preference.

A Cantonese GNOME user from Hong Kong learning Korean would install ibus-rime with Jyutping and Cangjie support alongside ibus-hangul for Korean support. Here, IBus is the IMF, Rime IME provides support for the Jyutping IM and Cangjie IM, while libhangul IME provides support for the Hangul IM.

In most typical cases, only 1 IMF is installed in a system. However, multilingual users may choose to install multiple IMEs so that they can type in multiple languages.

Fcitx5 vs IBus

IBus (Intelligent Input Bus) is an IMF usually used in GTK-based desktop environments. If you are using GNOME/Budgie, you most likely will choose IBus over Fcitx5 due to GNOME Desktop’s tight integration with IBus. Even though IBus’s initial release was back in August 2008, releases are still rather frequent and the project is still being maintained.

Fcitx5 is a newer IMF implementation and provides support for many different languages with a slim core extensible with different addons and IMEs. It is the successor to Fcitx. If you are using DEs that are not GTK-based (such as KDE Plasma which uses Qt) or any WMs, you should choose Fcitx5.

There are no strict rules on which one to choose, you can install Fcitx5 even though you use GNOME, and you can also install IBus on a KDE system. Things come down to personal preferences.

IBus will not work inside Window Managers.

Setting up Fcitx5 on KDE

  1. Install your chosen IMEs (see the table below) alongside kcm-fcitx5 and fcitx5-configtool.

    • Install fcitx5-qt and fcitx5-gtk for Qt/GTK support.
  2. Enable Fcitx 5:

    • On Wayland (default), go to Settings > Input Devices > Virtual Keyboard, and select Fcitx 5.
      • If Fcitx 5 does not work even after a reboot, try running im-chooser and select Fcitx 5.
    • On X11, install fcitx5-autostart.
      • If Fcitx 5 does not work even after a reboot, try setting the following in /etc/environment:
      GTK_IM_MODULE=fcitx
      QT_IM_MODULE=fcitx
  3. Head to Settings > Regional Settings > Input Method, then start configuring Fcitx 5.

Setting up Fcitx5 on other DEs/WMs

  1. Install your chosen IMEs (see the table below) alongside fcitx5-configtool, fcitx5-autostart.

    • Install fcitx5-qt and fcitx5-gtk for Qt/GTK support.
  2. Fcitx 5 should be enabled via the autostart package. If not,

    • try running im-chooser and select Fcitx 5.
    • try setting the following in /etc/environment:
      GTK_IM_MODULE=fcitx
      QT_IM_MODULE=fcitx
  3. When Fcitx 5 is running, right click on the new β€œen” icon on the system tray > Settings.

  4. Start configuring Fcitx5.

Setting up IBus

  1. Install your chosen IMEs (see the table below).
  2. On GNOME, Budgie/Flagship and similar DEs, go into Settings > Keyboard.
  3. On other DEs, run ibus-setup.
  4. If IBus does not work correctly,
    • try running im-chooser and select IBus.
    • try setting the following in /etc/environment:
      GTK_IM_MODULE=ibus
      QT_IM_MODULE=ibus

List of IMEs and IMs

Credits to Arch Wiki contributors for a complete list of IMs. The table is filtered and amended such that it better represents Ultramarine’s support on different IMs:

               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 ↓IM/IME  IMFβ†’ β”‚        Fcitx5       β”‚        IBus         β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                          CHINESE                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     Rime     β”‚     fcitx5-rime     β”‚      ibus-rime      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Pinyin    β”‚fcitx5-chinese-addonsβ”‚     ibus-pinyin     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Zhuyin    β”‚    fcitx5-chewing   β”‚     ibus-chewing    β”‚
β”‚   Libzhuyin  β”‚    fcitx5-zhuyin    β”‚    ibus-libzhuyin   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Cangjie   β”‚                     β”‚ ibus-table-chinese- β”‚
β”‚ Sucheng/Quickβ”‚ fcitx5-table-extra⁡ β”‚ {cangjie,quick,scj} β”‚
β”‚ SmartCangjie β”‚     (and More…)     β”‚ /ibus-table-chinese β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Haifeng Wubi β”‚ fcitx5-table-extra⁡ β”‚ ibus-table-chinese- β”‚
β”‚  Jidian Wubi β”‚     (and More…)     β”‚wubi-{haifeng,jidian}β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Others    β”‚ fcitx5-table-extra? β”‚ ibus-table-chinese? β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                         JAPANESE                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     Mozc     β”‚     fcitx5-mozc     β”‚      ibus-mozc      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    AnthyΒΉ    β”‚     fcitx5-anthy    β”‚      ibus-anthy     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     SKKΒ²     β”‚     fcitx5-skk      β”‚      ibus-skk       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     KKCΒ³     β”‚     fcitx5-kkc      β”‚      ibus-kkc       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                          KOREAN                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   Libhangul  β”‚    fcitx5-hangul    β”‚     ibus-hangul     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        VIETNAMESE                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Unikey    β”‚    fcitx5-unikey    β”‚     ibus-unikey     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     ViQR     β”‚     fcitx5-m17n     β”‚    ibus-table-tv    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                          INDIC                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     m17n     β”‚     fcitx5-m17n     β”‚      ibus-m17n      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  OpenBangla  β”‚  fcitx5-openbangla  β”‚   ibus-openbangla   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚Sayura Sinharaβ”‚    fcitx5-sayura    β”‚     ibus-sayura     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                          OTHERS                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     Thai     β”‚    fcitx5-libthai   β”‚    ibus-table-tv    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Math Symbols β”‚    Compose Key⁴?    β”‚ibus-table-mathwriterβ”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Completion  β”‚      *builtin*      β”‚ ibus-typing-booster β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Everything  β”‚     fcitx5-m17n     β”‚      ibus-m17n      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Notes:

  1. Anthy (the IM, not IME) is unmaintained, Mozc is usually preferred.
  2. https://github.com/ueno/libskk
  3. https://github.com/ueno/libkkc
  4. See #Compose Key. There is also LaTeX support in fcitx5-m17n.
  5. See below for more IMs supported by fcitx5-table-extra.

List of IMs supported by fcitx5-table-extra

  • boshiamy
  • cangjie-large
  • cangjie3
  • cangjie5
  • cantonese
  • cantonhk
  • easy-large
  • jyutping-table
  • quick-classic
  • quick3
  • quick5
  • scj6
  • stroke5
  • t9
  • wu
  • wubi-large
  • wubi98-large
  • wubi98-pinyin
  • wubi98-single
  • wubi98
  • zhengma-large
  • zhengma-pinyin
  • zhengma

List of packages for ibus-table*

  • ibus-table-code: Ibus-Tables for Latex, CNS11643 & Emoticons
  • ibus-table-cyrillic: Ibus-Tables for Cyrillic
  • ibus-table-extraphrase: Extra phrase for ibus-table
  • ibus-table-latin: Ibus-Tables for Latin
  • ibus-table-mathwriter: Ibus-Tables for Unicode mathematics symbols
  • ibus-table-mongol: Ibus-Tables for Mongol Script
  • ibus-table-others: Various tables for IBus-Table
  • ibus-table-translit: Ibus-Tables for Russian Translit
  • ibus-table-tv: Ibus-Tables for Thai and Viqr (Vietnamese)
  • ibus-table-chinese: Chinese input tables for IBus
  • ibus-table-chinese-array: Array input methods
  • ibus-table-chinese-cangjie: Cangjie based input methods
  • ibus-table-chinese-cantonese: Cantonese input methods
  • ibus-table-chinese-cantonyale: Cantonese input method based on yale romanization
  • ibus-table-chinese-easy: Easy input method
  • ibus-table-chinese-erbi: Erbi input method
  • ibus-table-chinese-quick: Quick-to-learn input methods
  • ibus-table-chinese-scj: Smart Cangjie
  • ibus-table-chinese-stroke5: Stroke 5 input method
  • ibus-table-chinese-wu: Wu pronunciation input method
  • ibus-table-chinese-wubi-haifeng: Haifeng Wubi input method
  • ibus-table-chinese-wubi-jidian: Jidian Wubi 86 input method, JiShuang 6.0
  • ibus-table-chinese-yong: YongMa input method

Rime

Rime is an input method engine / IME for typing Chinese. It supports a wide range of IMs and is highly customizable.

You may refer to ArchWiki regarding how Rime could be configured. Note that Fedora/Ultramrine does not provide rime-* packages in our repositories. You will need to use plum (aka. rime-install) to install schemas. rime-install defaults to ibus; append rime_frontend=fcitx-rime to the front of the command if you are using Fcitx5:

rime_frontend=fcitx-rime bash rime-install rime-aca/rime-cangjie6

Compose Key

See Compose Key on Wikipedia and on ArchWiki.

Translations

Users that speak less popular languages might face issues where their system shows text in English even though the language settings are configured properly. Do not report this issue to us. This is due to lack of translation efforts from upstream (either the DE/WM or the app in concern). You may help by visiting the translation platform provided by upstream and be a translator. Your contributions would improve the entire Linux ecosystem experience for minorities.

Ultramarine Components

If projects / software provided by Ultramarine (such as the Readymade installer) are untranslated in your language, or you would like to improve the translations, please visit our Weblate translation platform.

There are cases where your language is not shown in the list of languages. This might be because no one has made efforts on translating the software, or it is not supported by the i18n libraries used by the software. For example, there is no Cantonese language option in Readymade because the i18n library provided by GNOME Desktop does not support it. In this case, you should report this issue to the upstream library. If you have a hard time determining where to report, you may join one of our communities and reach out.