Mengubah keluarga font untuk karakter bahasa / skrip tertentu menggunakan fontconfig?

8

Saya di Arch Linux, Deepin Desktop. Saya menggunakan Noto Serif sebagai font standar saya, tetapi saya tidak suka karakter bahasa Arabnya. Jadi tujuan saya adalah menggunakan font lain hanya untuk karakter arab.

Inilah yang saya coba. Saya membuat file konfigurasi baru /etc/fonts/conf.d/dengan konten berikut:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>sans-serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>
</fontconfig>

Saya kemudian berlari fc-cache -r. Tapi ini tidak berhasil, font yang sama masih digunakan dan menjalankan fc-matchpengembalian NotoSerif-Regular.ttf: "Noto Serif" "Regular"seperti sebelumnya.

Omar Emara
sumber
Nama apa yang Anda berikan file konfigurasi Anda? Apa lokal Anda (atau, lebih spesifik, LC_CTYPEkategori lokal)?
Gunnar Hjalmarsson
@ GunnarHjalmarsson saya gunakan 99-bangla.confdalam ~/.config/fontconfig/conf.ddirektori. Sepertinya saya mendapatkan default saat dijalankan LANG=bn fc-match. Tetapi google chrome masih memilih font lain
Anwar

Jawaban:

2

Banyak font Noto melaporkan ke sistem bahwa mereka mendukung skrip Arab, yang mereka lakukan — sebagian. Salah satu font ini adalah font Urdu , dan untuk alasan apa pun ia memiliki prioritas di atas font lain yang mendukung Script Arab.

Anda dapat memilih font tertentu daripada yang lain sebagai berikut:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<alias>
  <family>sans-serif</family>
  <prefer>
   <family>Noto Sans</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

 <alias>
  <family>serif</family>
  <prefer>
   <family>Noto Serif</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

 <alias>
  <family>monospace</family>
  <prefer>
   <family>Noto Sans Mono</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

</fontconfig>

Semakin tinggi posisi font, semakin disukai. Dalam hal ini, kami lebih suka Noto Naskh Arabicdaripada font tulisan Arab lainnya.

Anda dapat melakukan ini tentu saja dengan bahasa atau font pilihan Anda.

Untuk beberapa alasan, hanya file konfigurasi pengguna yang berfungsi untuk saya, yang terletak di ~/.config/fontconfig/fonts.conf. Perhatikan bahwa $XDG_CONFIG_HOMEvariabel lingkungan harus diatur ke .configdirektori Anda di direktori home Anda, jadi $HOME/.config.

Anda kemudian harus membangun kembali konfigurasi agar bisa berfungsi menggunakan fc-cache. Hanya aplikasi yang baru diluncurkan yang akan ditampilkan dengan konfigurasi baru. Mulai ulang server X atau Desktop Anda agar perubahan diterapkan secara global.

Sunting: Jika Anda cocok dengan arlokal yang tidak berfungsi di semua situs web, karena beberapa situs web menggunakan enlokal saat menampilkan karakter UTF-8 Arab.

Jika Anda pergi ke /etc/fonts/conf.ddan membaca READMEdan kemudian membaca file konfigurasi yang dimulai dengan [30-40]Anda akan tahu bahwa ini adalah jawaban yang tepat.

Jika mengatakan sebuah situs web meminta font Serif; fontconfig memeriksa daftar ini, pertama hingga Noto Serif, ketika menemukan karakter Arab, ia beralih ke font kedua dalam daftar - Noto Naskh Arabic- dan menemukan bahwa font tersebut mendukung skrip Arab, sehingga digunakan.

Khaled Emara
sumber
1
Terima kasih! Tampaknya untuk Deepin, cukup menambahkan <string>Noto Naskh Arabic</string>ke ~/.config/fontconfig/conf.d/99-deepin.conffile melakukan pekerjaan.
Omar Emara
Nama file harus berkisar antara 50 hingga 69 di Ubuntu, saya kira
Anwar