Are there fonts with multiple latin characters in the same glyph?

时间:2018-12-03 13:16:34

标签: fonts glyph

I'm having a little project where i'm trying to localize a japanese software. Sadly for this project i cannot change the byte length of several strings and they're hardcoded to use UTF16, which means a single kanji that can represent a complicated word can only be replaced with a single latin letter. (As opposed to UTF8, where latin letters use up fewer bytes.)

However the fonts the software uses can be replaced freely.

One solution for this then would be to use a font that has glyphs that contain multiple latin characters.

Does something like this already exist?

1 个答案:

答案 0 :(得分:2)

如果可以使用OpenType字体,请使用GSUB机制,这是通过字体进行本地化的最“自然”的方式(因为那是物)。通过将本地化映射中的每个字符序列定义为其自己的替换规则,还可以避免从PUA映射中出现重叠问题。

首先,使用标准cmap子表格式4(有效:类似于所有现代字体),使用想要使用的普通拉丁字符集定义字体,然后将整个CJK空间定义为“受支持”使用cmap子表格式14说“支持2E80和10FFF0之间的所有代码点并映射到glyphid 1”。现在,您的字体“支持” CJK,但实际上将无法“绘制” CJK文本。很好:

然后,您定义(多种)GSUB多对多连字规则,其形式为:

...
消_す -> d_e_l_e_t_e
ヘ_ル_プ -> h_e_l_p
...

真正的魔力发生了:在实际应用程序中无需更改任何内容(不更改字体),您现在完全可以通过以下方式获得正确的英语(或所需的任何语言)对应字符串:字体执行应做的工作:看到它需要使字符串消す成形,转到“我支持该字符串中的所有字符”,然后转到“我对代码点的这种精确组合具有替换规则”,然后转到“我已经为delete塑造了组合,就在这里。”

当然,这可能会导致您的英语标签过宽的本地化,并且您可能仍然需要PUA来解决这个问题,在这种情况下,您基本上会执行相同的技巧:在illustrator / inkscape / any中写出您的单词具有良好文本支持的矢量编辑器,使用字体编辑器或类似TTX之类的符号将整个本地化导入为单个字形,然后使用GSUB规则设置指向该单个字形而不是新序列的GSUB规则。多对一GSUB规则:

...
報告書 -> {glyph id for the "Generate report" glyph in PUA}
...

那就应该是:利用OpenType来实现本地化,而无需触摸“真实”代码(当然,除了您编写的用于自动实现字体生成过程的代码!)

我强烈建议加入https://typedrawers.com,要求人们提供实际的实现和相关的工具帮助-在诸如Font Creator之类的应用中这几乎是微不足道的,在诸如Font Forge之类的工作中几乎不需要做很多工作,但是TypeDrawers是所有版式工程师的专长,与Stackoverflow相比,您更有可能获得详细的帮助。