语言更改时如何管理两个不同的字体文件

Posted

技术标签:

【中文标题】语言更改时如何管理两个不同的字体文件【英文标题】:How to manage two different font files when language changes 【发布时间】:2022-01-06 01:16:35 【问题描述】:

我有一个多语言的 vue 应用程序(为此我使用了 i18n),我需要在不同的 css 文件中处理每种语言的字体系列。

我有一个想法,我可以有条件地导入 css 文件,但我不知道如何。

其他人对我的问题有任何想法或解决方案吗?

有两个像这样的不同 css 文件,每个都呈现不同的字体:

@font-face 
  font-family: "Questrial";
  src: url("../../fonts/Questrial-Regular.ttf");


@font-face 
  font-family: "Galano_Grotesque_extra_Bold";
  src: url("../../fonts/Galano_Grotesque_Bold.otf");


@font-face 
  font-family: "Galano_Grotesque_Bold";
  src: url("../../fonts/Galano_Grotesque_DEMO_Bold.otf");

换句话说,我的应用程序有“英语”和“波斯语”两种语言。 当应用语言环境为英语时,我需要渲染 en-css.css 文件,当语言环境为波斯语时,我需要渲染 fa-css.css 文件。

我很高兴听到你的想法:)

【问题讨论】:

您的应用程序是否根据您提供的语言正确设置了html-tag 的lang 属性?如果是,您可以使用attribute selector 根据值更改字体。 @F***S。是的,它确实。谢谢 【参考方案1】:

鉴于您无法更改 lang 属性,您可以在字体定义中使用 unicode-range。对于使用基本拉丁字母的语言:

@font-face 
  font-family: "Questrial";
  src: url("../../fonts/Questrial-Regular.ttf");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;

对于波斯语(使用 Vazir 作为波斯语字体示例),

@font-face 
  font-family: "Vazir";
  src: url("../../fonts/vazir.ttf");
  unicode-range: U+0660-0669, U+06F0-06F9;

上述 Unicode 范围可能需要根据您的应用要求进行调整。

【讨论】:

【参考方案2】:

您可以使用 html-tags lang 属性根据您的应用程序语言覆盖 html 标签上使用的字体系列。

@font-face 
  font-family: "Questrial";
  src: url("../../fonts/Questrial-Regular.ttf");


@font-face 
  font-family: "Galano_Grotesque_extra_Bold";
  src: url("../../fonts/Galano_Grotesque_Bold.otf");


@font-face 
  font-family: "Galano_Grotesque_Bold";
  src: url("../../fonts/Galano_Grotesque_DEMO_Bold.otf");



/* english font default */

html 
  font-family: "Questrial";



/* other font for persian */

html[lang="fa"] 
  font-family: "Galano_Grotesque_Bold";

【讨论】:

感谢您的想法。但是当我更改语言时,html 元素中的 lang 属性不会更新并且保持不变。 @NiazEstefaie 你的意思是你的应用程序的语言发生了变化,但lang 属性没有?所以你的页面显示波斯语内容但lang 属性仍然是en?情况并非如此,lang 属性始终应代表内容语言。 是的,语言更改时 lang 属性不会更新。

以上是关于语言更改时如何管理两个不同的字体文件的主要内容,如果未能解决你的问题,请参考以下文章

Timelinejs, 2sxc 更改字体和语言

如何在 Linux 上从字体文件创建字体预览图像?

安卓字体文件分别代表啥

Quartus II 里面,MegaWizard字体过小,根本看不清。如何调整?

将字体转换为字符串并再次返回

仅更改 NSAttributedString 的字体大小