【发布时间】:2023-03-06 00:22:02
【问题描述】:
我正在开发一个需要显示日文字符的 javascript 记忆游戏。是否有跨浏览器的方式来检测对亚洲语言或日语的支持?
window.navigator.language 将设置为浏览器的语言,但会漏掉不将日语设置为浏览器语言的人 (?)。
【问题讨论】:
标签: javascript browser internationalization
我正在开发一个需要显示日文字符的 javascript 记忆游戏。是否有跨浏览器的方式来检测对亚洲语言或日语的支持?
window.navigator.language 将设置为浏览器的语言,但会漏掉不将日语设置为浏览器语言的人 (?)。
【问题讨论】:
标签: javascript browser internationalization
是否有跨浏览器的方式来检测对亚洲语言或日语的支持?
您的意思是“是否安装了日文字体”?因为现代操作系统可以配置的“对亚洲语言的支持”的唯一其他方面是与 Shift-JIS 等字符编码是否已知(在 Windows 上也称为代码页 932)有关。但无论如何您通常都不需要它,因为您可以使用 UTF-8,它更干净且在任何地方都受支持。
一般来说,您无法直接判断是否安装了特定字符范围的字体,但有一些迂回的方法。例如测量页面文本的渲染大小:
var half= document.createElement('span');
var full= document.createElement('span');
half.appendChild(document.createTextNode('\uFF71'));
full.appendChild(document.createTextNode('\u30A2'));
document.body.insertBefore(half, document.body.firstChild);
document.body.insertBefore(full, document.body.firstChild);
var havejapanesefont= half.offsetWidth!=full.offsetWidth;
document.body.removeChild(half);
document.body.removeChild(full);
这会临时创建包含片假名“a”的半角和全角变体的元素。如果可以使用日文字体,我们希望它们具有不同的宽度。如果不存在这样的字体,它们很可能会被渲染为具有相同宽度的类似“不可渲染字符”字形。
【讨论】:
您的服务器可能能够检查Accept-Charset 标头,如果它不包含日文字符,则重定向到警告页面。不幸的是,正如this thread 所指出的,标头不适用于javascript。
【讨论】: