Bab 8. I18N dan L10N

# Bab 8. I18N dan L10N

Multilingualisasi (M17N) atau Dukungan Bahasa Asli untuk perangkat lunak aplikasi dilakukan dalam 2 langkah.

- Internasionalisasi (I18N): Untuk membuat perangkat lunak berpotensi menangani beberapa lokal.

- Pelokalan (L10N): Untuk membuat perangkat lunak menangani lokal tertentu.

| Tip
Ada 17, 18, atau 10 huruf antara "m" dan "n", "i" dan "n", atau "l" dan "n" dalam multilingualization (multibahasa), internationalization (internasionalisasi), dan localization (pelokalan) yang sesuai dengan M17N, I18N, dan L10N. Lihat Internasionalisasi dan pelokalan untuk detailnya.

## 8.1. Lokal

Perilaku program yang mendukung internasionalisasi dikonfigurasi oleh variabel lingkungan "`$LANG`" untuk mendukung pelokalan. Dukungan aktual dari fitur dependen lokal oleh pustaka `libc` memerlukan pemasangan paket `locales` atau `locales-all`. Paket `locales` harus diinisialisasi dengan benar.

Jika paket `locales` dan `locales-all` tidak terpasang, dukungan fitur lokal hilang dan sistem menggunakan pesan bahasa Inggris AS dan menangani data sebagai ASCII. Perilaku ini adalah cara yang sama seperti "`$LANG`" diatur oleh "`LANG=`", "`LANG=C`", atau "`LANG=POSIX`".

Perangkat lunak modern seperti GNOME dan KDE telah menjadi multibahasa. Mereka diinternasionalisasi dengan membuat mereka menangani data UTF-8 dan dilokalkan dengan menyediakan pesan terjemahan mereka melalui infrastruktur gettext(1). Pesan yang diterjemahkan dapat disediakan sebagai paket pelokalan terpisah.

Sistem GUI desktop Debian saat ini biasanya menetapkan lokal di bawah lingkungan GUI sebagai "`LANG=xx_YY.UTF-8`". Di sini, "`xx`" adalah kode bahasa ISO 639 dan "`YY`" adalah kode negara ISO 3166. Nilai-nilai ini diatur oleh dialog GUI konfigurasi desktop dan mengubah perilaku program. Lihat Bagian 1.5.2, “Variabel "`$LANG`"”

### 8.1.1. Alasan untuk lokal UTF-8

Representasi paling sederhana dari data teks adalah ASCII yang cukup untuk bahasa Inggris dan menggunakan kurang dari 127 karakter (diwakili dengan 7 bit).

Bahkan teks bahasa Inggris polos mungkin berisi karakter non-ASCII, misalnya tanda kutip kiri dan kanan yang sedikit keriting tidak tersedia dalam ASCII.

    “double quoted text” is not "double quoted ASCII"
    ‘single quoted text’ is not 'single quoted ASCII'

Untuk mendukung lebih banyak karakter, banyak set karakter dan sistem pengodean telah digunakan untuk mendukung banyak bahasa (lihat Tabel 11.2, “Daftar nilai pengodean dan penggunaannya”).

Kumpulan karakter Unicode dapat mewakili hampir semua karakter yang dikenal manusia dengan rentang titik kode 21 bit (yaitu, 0 hingga 10FFFF dalam notasi heksadesimal).

Sistem pengodean teks UTF-8 mempaskan titik kode Unicode ke dalam aliran data 8 bit yang masuk akal yang sebagian besar kompatibel dengan sistem pemrosesan data ASCII. Hal ini membuat UTF-8 pilihan modern yang disukai. UTF adalah singkatan dari Unicode Transformation Format. Ketika data teks polos ASCII dikonversi ke UTF-8, ia memiliki konten dan ukuran yang persis sama dengan yang asli ASCII. Jadi Anda tidak kehilangan apa pun dengan menggelar lokal UTF-8.

Di bawah lokal UTF-8 dengan program aplikasi yang kompatibel, Anda dapat menampilkan dan menyunting data teks bahasa asing selama fonta yang diperlukan dan metode masukan dipasang dan diaktifkan. Misalnya di bawah lokal "`LANG=fr_FR.UTF-8`", gedit(1) (penyunting teks untuk Desktop GNOME) dapat menampilkan dan menyunting data teks karakter Cina sambil menyajikan menu dalam bahasa Prancis.

| Tip

Lokal standar baru "`en_US.UTF-8`" dan lokal standar lama "`C`"/"`POSIX`" menggunakan pesan bahasa Inggris standar AS, mereka memiliki perbedaan halus dalam urutan penyortiran dll. Jika Anda ingin menangani tidak hanya karakter ASCII tetapi juga menangani semua karakter yang dikodekan UTF-8 dengan anggun sambil mempertahankan perilaku lokal "`C`" lama, gunakan lokal "`C.UTF-8`" non-standar pada Debian.

| Catatan
Beberapa program mengkonsumsi lebih banyak memori setelah mendukung I18N. Ini karena mereka dikodekan untuk menggunakan UTF-32(UCS4) secara internal untuk mendukung Unicode bagi optimasi kecepatan dan mengkonsumsi 4 byte per setiap data karakter ASCII independen dari lokal yang dipilih. Sekali lagi, Anda tidak kehilangan apa pun dengan menggelar lokal UTF-8.

### 8.1.2. Konfigurasi ulang lokal

Agar sistem dapat mengakses lokal tertentu, data lokal harus dikompilasi dari basis data lokal.

Paket `locales` tidak dilengkapi dengan data lokal yang telah dikompilasi sebelumnya. Anda harus mengkonfigurasinya sebagai:

    # dpkg-reconfigure locales

Proses ini melibatkan 2 langkah.

1. Pilih semua data lokal yang diperlukan untuk dikompilasi ke dalam bentuk biner. (Pastikan untuk menyertakan setidaknya satu lokal UTF-8)

2. Atur nilai lokal baku seluruh sistem dengan membuat "`/etc/default/locale`" untuk digunakan oleh PAM (lihat Bagian 4.5, “PAM dan NSS”).

Nilai lokal baku seluruh sistem yang diatur dalam "`/etc/default/locale`" dapat ditimpa oleh konfigurasi GUI bagi aplikasi GUI.

| Catatan
Sistem pengodean tradisional sebenarnya dapat diidentifikasi dengan "`/usr/share/i18n/SUPPORTED`". Jadi, "`LANG=en_US`" adalah "`LANG=en_US.ISO-8859-1`".

Paket `locales-all` dilengkapi dengan data lokal yang telah diprakompilasi untuk semua data lokal. Karena itu tidak membuat "`/etc/default/locale`", Anda mungkin masih perlu memasang paket `locales` juga.

| Tip
Paket `locales` dari beberapa distribusi turunan Debian datang dengan data locale terprakompilasi untuk semua data locale. Anda perlu memasang paket `locales` dan `locales-all` pada Debian untuk mengemulasi lingkungan sistem seperti itu.

### 8.1.3. Pengodean nama berkas

Untuk pertukaran data lintas platform (lihat Bagian 10.1.7, “Perangkat penyimpanan lepasan”), Anda mungkin perlu mengait beberapa sistem berkas dengan pengodean tertentu. Misalnya, mount(8) untuk sistem berkas vfat mengasumsikan CP437 jika digunakan tanpa opsi. Anda perlu memberikan opsi mount eksplisit untuk menggunakan UTF-8 atau CP932 untuk nama berkas.

| Catatan
Saat memasang otomatis USB flash drive yang dapat dipasang panas di lingkungan desktop modern seperti GNOME, Anda dapat memberikan opsi pasang tersebut dengan mengklik kanan ikon di desktop, klik tab "Drive", klik untuk memperluas "Setting", dan masukkan "utf8" ke "Mount options:". Lain kali USB flash drive ini dipasang, pemasangan dengan UTF-8 akan diaktifkan.

| Catatan
Jika Anda memutakhirkan sistem atau memindahkan disk drive dari sistem non-UTF-8 yang lebih lama, nama berkas dengan karakter non-ASCII dapat dikodekan dalam pengodean bersejarah dan usang seperti ISO-8859-1 atau eucJP. Silakan cari bantuan alat konversi teks untuk mengubahnya menjadi UTF-8. Lihat Bagian 11.1, “Alat konversi data teks”.

Samba menggunakan Unicode untuk klien yang lebih baru (Windows NT, 200x, XP) tetapi menggunakan CP850 untuk klien yang lebih lama (DOS dan Windows 9x/Me) sebagai baku. Baku untuk klien yang lebih tua ini dapat diubah menggunakan "`dos charset`" dalam berkas "`/etc/samba/smb.conf`", misalnya, menjadi CP932 untuk bahasa Jepang.

### 8.1.4. Pesan terlokalkan dan dokumentasi yang diterjemahkan

Terjemahan ada untuk banyak pesan teks dan dokumen yang ditampilkan dalam sistem Debian, seperti pesan kesalahan, keluaran program standar, menu, dan halaman manual. rantai alat perintah GNU gettext (1) digunakan sebagai alat backend untuk sebagian besar kegiatan terjemahan.

Di bawah "Tugas" → "Pelokalan" aptitude(8) menyediakan daftar panjang paket biner yang berguna yang menambahkan pesan terlokalkan ke aplikasi dan menyediakan dokumentasi yang diterjemahkan.

Misalnya, Anda dapat memperoleh pesan lokal untuk manpage dengan memasang paket `manpages-LANG`. Untuk membaca manpage berbahasa Italia bagi nama program dari "`/usr/share/man/it/`", jalankan sebagai berikut.

    LANG=it_IT.UTF-8 man programname

GNU gettext dapat mengakomodasi daftar prioritas bahasa terjemahan dengan variabel lingkungan `$LANGUAGE`. Misalnya:

     $ export LANGUAGE="pt:pt_BR:es:it:fr"

Untuk informasi selengkapnya, lihat `info gettext` dan baca bagian "Variabel LANGUAGE".

### 8.1.5. Efek dari lokal

Pengurutan karakter dengan sort(1) dan ls(1) dipengaruhi oleh lokal. Mengekspor `LANG=en_US.UTF-8` mengurutkan dalam urutan kamus `A->a->B->b...->Z->z`, sementara mengekspor `LANG=C.UTF-8` mengurutkan dalam urutan biner ASCII `A->B->...->Z->a->b....`.

Format tanggal ls(1) dipengaruhi oleh lokal (lihat Bagian 9.3.4, “Tampilan waktu dan tanggal yang disesuaikan”).

Format tanggal dari date(1) dipengaruhi oleh lokal. Misalnya:

     $ unset LC_ALL
     $ LANG=en_US.UTF-8 date
    Thu Dec 24 08:30:00 PM JST 2023
     $ LANG=en_GB.UTF-8 date
    Thu 24 Dec 20:30:10 JST 2023
     $ LANG=es_ES.UTF-8 date
    jue 24 dic 2023 20:30:20 JST
     $ LC_TIME=en_DK.UTF-8 date
    2023-12-24T20:30:30 JST

Tanda baca angka berbeda untuk lokal. Misalnya, di lokal Inggris, seribu satu titik satu ditampilkan sebagai "`1.000,1`" sementara di lokal Jerman, ditampilkan sebagai "`1.000,1`". Anda mungkin melihat perbedaan ini dalam program lembar kerja.

Setiap fitur detail variabel lingkungan "`$LANG`" dapat ditimpa dengan menetapkan variabel "`$LC_*`". Variabel lingkungan ini dapat ditimpa lagi dengan menetapkan variabel "`$LC_ALL`". Lihat manpage locale(7) untuk rinciannya. Kecuali Anda memiliki alasan kuat untuk membuat konfigurasi yang rumit, silakan menjauh dari mereka dan hanya menggunakan variabel "`$LANG`" yang diatur ke salah satu lokal UTF-8.

## 8.2. Masukan papan ketik

The keyboard system can be configured at different layers of the system.

- Linux kernel: keyboard(5)

- X server: setxkbmap(1), xkeyboard-config(5), environment variable `XMODIFIERS`

- GUI desktop environment: Input Method framework: `ibus`, `fcitx5`

- Application: environment variables to set its input source: `GTK_IM_MODULE`, `QT_IM_MODULE`, `QT_IM_MODULES`, ...

Input method framework (IM) consists of:

- Input method engine (IME): Actual input method

- Configuration: Handles the configuration for IBus and other services such as IME plugins

- Panel: User interface such as language bar and candidate selection table

Masukan multibahasa ke aplikasi diproses kurang lebih sebagai:

    Keyboard        UI panel    Configuration          Application
    |                  ^ |           |                        ^  ^
    v                  | v           v                        |  |
    Linux kernel -> Input method engine (IME) -+-> Gtk, Qt ---+  |
                       | ^                     |                 |
                       | |                     +-> X11, Wayland -+
                       v |
                    IME plugin (ibus-mozc, ...)

### 8.2.1. Masukan papan ketik untuk konsol Linux dan X Window

The Debian system can be configured to work with many international keyboard arrangements using the `keyboard-configuration` package.

    # dpkg-reconfigure keyboard-configuration

For the Linux console and the X Window system, this updates configuration parameters in "`/etc/default/keyboard`". Many non-ASCII characters including accented characters used by many European languages can be made available with dead key, AltGr key, and compose key.

| Catatan
Jika ibus aktif, konfigurasi papan ketik X klasik Anda dengan `setxkbmap` mungkin ditimpa oleh `ibus` bahkan di bawah lingkungan desktop berbasis X klasik. Anda dapat menonaktifkan `ibus` yang dipasang menggunakan `im-config` untuk mengatur metode masukan ke "None". Untuk informasi selengkapnya, lihat Wiki Debian tentang papan ketik.

### 8.2.2. Masukan papan ketik untuk Wayland

Unlike the X Window protocol, the Wayland core protocol doesn't even support the input of accented characters. Popular Wayland Compositors, such as Mutter for GNOME or KWin for KDE, implement extension protocols such as the `text-input-unstable-v3` for the text input (see "current Wayland protocols and their support status").

The `text-input-unstable-v3` protocol works well with Input methods for Wayland (see "Wayland input method project post-mortem").

- Most GUI applications are built with GUI libraries such as GTK or Qt which support this `text-input-unstable-v3`.

- Popular Input Method Engines (IME), such as IBus or Fcitx (version 5), can work with this `text-input-unstable-v3`.

- IMEs support text input for many languages with plugins.

- Recent IMEs integrate "X Keyboard Extension (XKB)" functionalities such as `setxkbmap` previously provided by the X Window to support accented character text input for European languages for Wayland.

### 8.2.3. Dukungan metode masukan dengan IBus

For GNOME, "`ibus`" is the default IME which is automatically installed via its package dependency.

- Most multilingualized keyboard input features can be configured from "GNOME Settings" or "GNOME Tweaks".

- Some multilingualized keyboard input features may need to be configured from the ibus-setup(1) command.

- The emoji keyboard input is available by typing "`SUPER-.`" (Simultaneously type Windows and period keys) followed by a keyword for each emoji and SPACE-keys.

The list of IBus and its plugin packages are the following.

Tabel 8.1. List of IBus and its plugin packages

paket | popcon | ukuran | lokal yang didukung
--- | --- | --- | ---
ibus | V:213, I:252 | 1828 | kerangka kerja metode masukan menggunakan dbus
ibus-mozc | V:2.1, I:3.8 | 978 | Jepang
ibus-anthy | V:0.5, I:1.2 | 8958 | Jepang
ibus-skk | V:0.04, I:0.14 | 242 | Jepang
ibus-kkc | V:0.03, I:0.18 | 211 | Jepang
ibus-libpinyin | V:1.2, I:5.1 | 2767 | Cina (untuk zh_CN)
ibus-chewing | V:0.19, I:0.90 | 288 | Tionghoa (untuk zh_TW)
ibus-libzhuyin | V:0.00, I:0.11 | 41009 | Tionghoa (untuk zh_TW)
ibus-rime | V:0.26, I:0.49 | 78 | Tionghoa (untuk zh_CN/zh_TW)
ibus-cangjie | V:0.02, I:0.12 | 235 | Tionghoa (untuk zh_HK)
ibus-hangul | V:0.3, I:2.0 | 264 | Korea
ibus-libthai | V:0.00, I:0.05 | 84 | Bahasa Thai
ibus-table-thai | I:0.05 | 59 | Bahasa Thai
ibus-unikey | V:0.20, I:0.43 | 286 | Vietnam
keyman | I:0.10 | 507 | Multilingual: Keyman plugin for over 2000 languages
ibus-table | V:0.08, I:1.00 | 2271 | table plugin for IBus
ibus-m17n | V:0.3, I:2.0 | 373 | Multibahasa: Indic, Arab, dan lain-lain

### 8.2.4. The input method support with Fcitx

Kerangka metode input Fcitx (versi 5) populer di kalangan pengguna Tionghoa dan kompatibel dengan "`ibus`".

The list of "`fcitx5`" and its plugin packages are the following.

Tabel 8.2. List of Fcitx5 and its plugin packages

paket | popcon | ukuran | lokal yang didukung
--- | --- | --- | ---
fcitx5 | V:7, I:12 | 761 | kerangka metode input yang kompatibel dengan "`ibus`"
fcitx5-mozc | V:1.0, I:1.6 | 1260 | Jepang
fcitx5-anthy | V:0.06, I:0.20 | 808 | Jepang
fcitx5-skk | V:0.05, I:0.14 | 369 | Jepang
fcitx5-kkc | V:0.00, I:0.06 | 416 | Jepang
fcitx5-chinese-addons | I:9.0 | 17 | Tionghoa (metapaket untuk zh_*)
fcitx5-pinyin | V:3.8, I:9.4 | 1044 | Cina (untuk zh_CN)
fcitx5-chewing | V:0.2, I:1.0 | 217 | Tionghoa (untuk zh_TW)
fcitx5-zhuyin | I:0.06 | 41051 | Tionghoa (untuk zh_TW)
fcitx5-rime | V:0.44, I:0.84 | 371 | Tionghoa (untuk zh_CN/zh_TW)
fcitx5-table-cangjie-large | I:0.12 | 1292 | Tionghoa (untuk zh_HK)
fcitx5-hangul | V:0.09, I:0.23 | 235 | Korea
fcitx5-libthai | I:0.05 | 119 | Bahasa Thai
fcitx5-table-thai | I:0.08 | 34 | Bahasa Thai
fcitx5-unikey | V:0.08, I:0.20 | 588 | Vietnam
fcitx5-m17n | V:0.12, I:0.51 | 259 | Multibahasa: Indic, Arab, dan lain-lain
fcitx5-table | V:0.4, I:9.2 | 520 | table plugin for fcitx5
fcitx5-keyman | V:0.03, I:0.04 | 235 | Multilingual: Keyman plugin for over 2000 languages

### 8.2.5. Contoh untuk bahasa Jepang

I find the Japanese input method started under English environment ("`en_US.UTF-8`") very useful. Here is how I did this with IBus:

1. Install the Japanese input tool package `ibus-mozc` (or `ibus-anthy`).

2. - Generic: Execute ibus-setup(1) → select "Input Method" → click "`Add`" → "Japanese" → "Mozc (or Anthy)" → click "Add"

   - GNOME: Select "Settings" → "Keyboard" → "Input Sources" → click "`+`" in "Input Sources" → "Japanese" → "Mozc (or Anthy)" → click "Add"

3. Anda dapat memilih sebanyak mungkin sumber masukan.

4. Login ulang ke akun pengguna.

5. Siapkan setiap sumber masukan dengan mengklik kanan ikon bilah alat GUI.

6. Beralih di antara sumber masukan yang dipasang dengan SUPER-SPACE. (SUPER biasanya adalah kunci Windows.)

| Tip
Jika Anda ingin memiliki akses ke lingkungan papan ketik alfabet saja dengan papan ketik Jepang fisik di mana `shift-2` memiliki "`(tanda kutip ganda)` terukir, Anda memilih "Jepang" dalam prosedur di atas. Anda dapat memasukkan bahasa Jepang menggunakan "mozc Jepang (atau anthy)" dengan papan ketik fisik "AS" di mana shift-`2` memiliki `@` yang terukir.

- For Wayland:

  - The `im-config` package does nothing and can be removed safely.

  - You probably don't need to set environment variables except for the backward compatibility etc.

  - If you need to set environment variables, create a file such as "`~/.config/environment.d/50-input-method.conf` "to set them.

- For X Window:

  - Install the `im-config` package.

  - Entri menu GUI untuk im-config(8) adalah "Metode masukan".

  - Atau, jalankan "`im-config`" dari shell pengguna.

  - im-config(8) berperilaku berbeda jika perintah dijalankan dari root atau bukan.

  - im-config(8) memungkinkan metode masukan terbaik pada sistem sebagai baku tanpa tindakan pengguna.

## 8.3. Keluaran tampilan

Konsol Linux hanya dapat menampilkan karakter terbatas. (Anda perlu menggunakan program terminal khusus seperti jfbterm(1) untuk menampilkan bahasa non-Eropa pada konsol non-GUI.)

Lingkungan GUI (Bab 7, Sistem GUI) dapat menampilkan karakter apa pun di UTF-8 selama fonta yang diperlukan terpasang dan diaktifkan. (Pengodean data fonta asli diurus dan transparan kepada pengguna.)

### 8.3.1. Konfigurasi terminal

The Debian system can be configured to work with many international console arrangements using the `console-setup` package.

    # dpkg-reconfigure console-setup

For the Linux console and the X Window system, this updates configuration parameters in "`/etc/default/console-setup`" to display many non-ASCII characters including accented characters used by many European languages can be made available.

Ada beberapa komponen untuk mengkonfigurasi konsol karakter dan fitur sistem ncurses(3).

- Berkas "`/etc/terminfo/*/*`" (terminfo(5))

- Variabel lingkungan "`$TERM`" (term(7))

- setterm(1), stty(1), tic(1), dan toe(1)

Jika entri `terminfo` untuk `xterm` tidak berfungsi dengan `xterm`non-Debian, ubah tipe terminal Anda, "`$TERM`", dari "`xterm`" ke salah satu versi terbatas fitur seperti "`xterm-r6`" ketika Anda masuk ke sistem Debian dari jarak jauh. Lihat "`/usr/share/doc/libncurses5/FAQ`" untuk informasi lebih lanjut. "`dumb`" adalah penyebut umum terendah untuk "`$TERM`".

### 8.3.2. Karakter Lebar Karakter Ambigu Asia Timur

Di bawah lokal Asia Timur, karakter box drawing, Yunani, dan Sirilik mungkin ditampilkan lebih lebar dari lebar yang diinginkan sehingga menyebabkan keluaran terminal yang tidak sejajar (lihat Unicode Standard Annex #11, 4.2 Ambiguous Characters).

Anda dapat mengatasi masalah ini:

- `gnome-terminal`: Preferensi → Profil → Nama profil → Kompatibilitas → Karakter lebar-ambigu → Sempit

- `ncurses`: Atur lingkungan `export NCURSES_NO_UTF8_ACS=0`.

Bab 7. Sistem GUI |  | Bab 9. Tips sistem