Если вы можете использовать шрифт OpenType: используйте механизм GSUB, который является наиболее «естественным» (если это так) способом локализации через шрифт.Определяя каждую последовательность символов в вашей карте локализации как свое собственное правило подстановки, вы также избегаете проблем с наложением, возникающих при отображении PUA.
Во-первых, вы определяете свой шрифт с помощью обычного латинского набора символов, который вы хотите использовать.используйте, используя стандартный подтаблицу формата cmap 4 (эффективно: как и все современные шрифты), и затем вы определяете все пространство CJK как «поддерживаемое», используя формат 14 подтаблицы cmap, чтобы сказать, что «все кодовые точки между 2E80 и 10FFF0 поддерживаются, и сопоставить».до глифа 1 ".Теперь ваш шрифт «поддерживает» CJK, но на самом деле он не сможет «рисовать» CJK-текст.И это нормально:
затем вы определяете (много) GSUB многие-ко-многим лигатурным правилам вида:
...
消_す -> d_e_l_e_t_e
ヘ_ル_プ -> h_e_l_p
...
, так что происходит настоящее волшебство: без изменения что-нибудь в вашем реальном приложении, кроме смены шрифта, теперь вы получаете правильные английские (или любой другой язык) строки соответствия исключительно благодаря тому, что шрифт делает то, что должен делать: он видит, что ему нужно сформироватьстрока 消す
, идет "Я поддерживаю все символы в этой строке", затем идет "У меня есть правило подстановки для этой точной комбинации кодовых точек" и затем идет "Я сформировал комбинацию для delete
, вот она. "
Конечно, это может привести к локализации, когда ваш английский ярлык слишком широк, и вам все равно может понадобиться PUA, чтобы обойти это, и в этом случае вы в основном выполняете тот же трюк: выпишите свое слово вIllustrator / Inkscape / любой векторный редактор с хорошей поддержкой текста, импортируйте всю локализацию как один глиф, используя редактор шрифтов или сомчто-то вроде TTX , а затем настройте правило GSUB, которое указывает на этот отдельный глиф, а не на новую последовательность, используя правило GSUB «многие-к-одному»:
...
報告書 -> {glyph id for the "Generate report" glyph in PUA}
...
И это должно быть так: использование OpenType для достижения локализации, даже не касаясь «реального» кода (кроме кода, который вы пишете, для автоматизации процесса генерации шрифтов, конечно!)
И я настоятельно рекомендую присоединиться к https://typedrawers.com, чтобы попросить людей о реальной реализации и инструментальной помощи в этом - это почти тривиально в приложении, таком как Font Creator, это вряд ли много работы в чем-то вроде Font Forge, но типографские инструменты - то, где тусуются все инженеры типографии,и вы, скорее всего, получите более подробную помощь, чем Stackoverflow.