Cambiare la famiglia di caratteri per i caratteri di una determinata lingua / script usando fontconfig?


8

Sono su Arch Linux, Deepin Desktop. Sto usando Noto Serif come carattere standard, ma non mi piacciono i suoi caratteri arabi. Quindi il mio obiettivo è usare un altro carattere solo per i caratteri arabi.

Ecco cosa ho provato. Ho creato un nuovo file di configurazione /etc/fonts/conf.d/con i seguenti contenuti:

<?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>

Allora ho corso fc-cache -r. Ma questo non ha funzionato, lo stesso carattere è ancora in uso e in esecuzione fc-matchrestituisce NotoSerif-Regular.ttf: "Noto Serif" "Regular"come prima.


Quale nome hai dato al tuo file di configurazione? Qual è la tua locale (o, più specificamente, la LC_CTYPEcategoria locale)?
Gunnar Hjalmarsson

@GunnarHjalmarsson che uso 99-bangla.confnella ~/.config/fontconfig/conf.ddirectory. Sembra che ottenga il valore predefinito quando eseguito LANG=bn fc-match. Ma Google Chrome sceglie ancora altri caratteri
Anwar,

Risposte:


2

Molti caratteri Noto riportano al sistema che supportano la scrittura araba, cosa che fanno - in parte. Uno di questi caratteri è il carattere Urdu e, per qualsiasi motivo, ha la priorità su altri caratteri che supportano la scrittura araba.

Puoi preferire un carattere specifico rispetto agli altri come segue:

<?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>

Maggiore è la posizione del carattere, più è preferito. In questo caso, preferiamo Noto Naskh Arabicaltri caratteri di script arabi.

Puoi farlo ovviamente con qualsiasi lingua o font a tua scelta.

Per qualche motivo, solo il file di configurazione dell'utente ha funzionato per me, quelli che si trovano in ~/.config/fontconfig/fonts.conf. Nota che $XDG_CONFIG_HOMEla variabile ambientale deve essere impostata sulla tua .configdirectory nella tua home directory, quindi $HOME/.config.

È quindi necessario ricostruire la configurazione affinché abbia effetto utilizzando fc-cache. Solo la nuova applicazione lanciata verrà visualizzata con la nuova configurazione. Riavvia il server X o il desktop per rendere effettive le modifiche a livello globale.

Modifica: se si confronta con la arlocale che semplicemente non funziona su tutti i siti Web, poiché alcuni siti Web utilizzano una enlocale durante la visualizzazione di caratteri UTF-8 in arabo.

Se vai a /etc/fonts/conf.de leggi il READMEe poi leggi qualsiasi file di configurazione a partire da [30-40]sapresti che questa è la risposta giusta.

Se dire che un sito Web richiede un carattere Serif; fontconfig passa attraverso questo elenco, prima di tutto Noto Serif, quando trova un carattere arabo ricorre al secondo carattere dell'elenco Noto Naskh Arabic- e trova che il carattere supporta lo script arabo, quindi viene utilizzato.


1
Grazie! Sembra per Deepin, semplicemente aggiungendo <string>Noto Naskh Arabic</string>al ~/.config/fontconfig/conf.d/99-deepin.conffile fa il lavoro.
Omar Emara,

Immagino che il nome del file dovrebbe essere compreso tra 50 e 69 in Ubuntu
Anwar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.