首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WPF应用程序中实现本地化时,我如何知道Roboto是否与语言兼容?

在WPF应用程序中实现本地化时,我如何知道Roboto是否与语言兼容?
EN

Stack Overflow用户
提问于 2022-05-16 13:57:59
回答 2查看 107关注 0票数 0

我有一个使用Roboto FontFamily作为主要字体的WPF应用程序,但是可能有一些语言与Roboto (即中文)不兼容。如何以编程方式确定语言是否与Roboto不兼容,以便加载适当的FontFamily?机器人有不同的变体,如轻型,中型,Bold,意大利等。如果替代字体也有一些变化,我想可以选择那些。

Windows 10支持的语言列表如下:

南非荷兰语、阿尔巴尼亚语、阿姆哈拉语、阿拉伯语、亚美尼亚语、阿萨姆语、阿塞拜疆语、班加语(孟加拉国)、班加语(印度)、巴斯克语、白俄罗斯语、波斯尼亚语、保加利亚语、加泰罗尼亚语、中央库尔德语、切罗基语、中文(简体)、中文(繁体)、克罗地亚语、捷克语、丹麦语、达里-波斯语(阿富汗)、荷兰语、德语、希腊语、英语(联合王国)、英语(美国)、爱沙尼亚语、芬兰语、菲律宾语、法语(加拿大)、法语(法国)、加利西亚语、格鲁吉亚语、古吉拉特语、豪萨语、希伯来语、印地语、匈牙利语、冰岛语、伊博语、印度尼西亚、爱尔兰、意大利语、日语、甘纳达语、哈萨克语、哈萨克语、哈纳达语、哈萨克语、伊格博语K‘’iche‘、Kinyarwanda、Konkani、朝鲜语、吉尔吉斯、老挝、拉脱维亚、立陶宛、卢森堡、马其顿、马来、马来西亚、马耳他、毛利、马拉蒂、蒙古、尼泊尔、北索索、挪威Bokm l、挪威Nynorsk、Odia、波斯语(伊朗)、Punjabi (阿拉伯语)、Punjabi (Gurmukhi)、波兰、葡萄牙(巴西)、葡萄牙(葡萄牙)、Quechua、罗马尼亚、俄罗斯、苏格兰Gaelic、塞尔维亚(西里尔语、波斯尼亚-黑塞哥维那)、塞尔维亚(西里尔语、塞尔维亚)、塞尔维亚(拉丁语)、信德希(阿拉伯语)、辛哈拉语、斯洛伐克语、斯洛文尼亚语、西班牙(西班牙)、塔吉克斯坦、塔吉克斯坦、瑞典、瑞典泰米尔语、鞑靼语、特卢古语、泰语、蒂格里尼亚语、茨瓦纳语、土耳其语、土库曼语、乌克兰语、乌尔都语、维吾尔语、乌兹别克语、瓦伦西亚语、越南语、威尔士语、沃尔夫语、科萨语、约鲁巴语、祖鲁语。

是否有Roboto支持的Windows 10语言列表,或者Roboto不支持的语言列表?我一直找不到这样的名单。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-17 16:58:20

关于Roboto支持Windows 10语言,我联系了Google字体小组,回复如下:

使用 hyperglot.rosettatype.com 来确定任何字体的语言支持

使用此网站,Roboto不支持下列Windows 10语言:

阿姆哈拉语、阿拉伯语、亚美尼亚语、阿萨姆语、阿塞拜疆语、班加语(孟加拉国)、班加语(印度)、白俄罗斯语、波斯尼亚语、切罗基语、中文(简体)、中文(繁体)、达里语-波斯语(阿富汗)、格鲁吉亚语、古吉拉特语、豪萨语、希伯来语、印地语、伊格博语、卡纳达语、高棉语、孔卡尼语、朝鲜语、吉尔吉斯语、老挝语、马来西亚、马拉蒂语、尼泊尔语、奥迪亚语、波斯语、贾比语、罗马尼亚语、信德基语、僧伽罗语、泰米尔语、泰语、蒂格里尼亚语、乌尔都语、Uyghur语、瓦莱尼语、约鲁巴语

票数 0
EN

Stack Overflow用户

发布于 2022-05-17 08:13:30

  1. 知道支持哪种语言字体并不是一件真正的事情;你只能知道它包含了什么字形。(例如,逗号本身不是“英语”、“俄语”或“波斯语”符号,而是字体)。要更广泛地了解字体适合于显示特定语言,您可以检查通常用于该语言的符号范围(您可以查看它们这里这里)。在C# 3.0及更高版本中,您可以使用GlyphTypeface.CharacterToGlyphMap进行此操作。例如,如果您想知道您的字体是否支持阿拉伯字符,您将首先检查哪些unicode范围包含阿拉伯字母(即0600-06FF),并且检查字体文件中是否包含阿拉伯字符。下面是一个示例(如果所有相关类型都存在,则返回true,如果找不到什么,返回false ):
代码语言:javascript
复制
    private bool FontSuitableForArabic()
    {
        (int, int) langSymbolsRange;
        langSymbolsRange.Item1 = 0x600;
        langSymbolsRange.Item2 = 0x6FF;

        var families = Fonts.GetFontFamilies(@"C:\Users\User\Documents\Temp\TestFonts\Roboto-Regular.TTF");
        foreach (var family in families)
        {
            var typefaces = family.GetTypefaces();
            foreach (Typeface typeface in typefaces)
            {
                GlyphTypeface glyph;
                typeface.TryGetGlyphTypeface(out glyph);
                IDictionary<int, ushort> characterMap = glyph.CharacterToGlyphMap;
                for (int i = langSymbolsRange.Item1; i != langSymbolsRange.Item2; i++)
                {
                    if (!characterMap.TryGetValue(i, out ushort _))
                    {
                        Console.WriteLine($"Failed to find Unicode Character {i:X} in this font!");
                        return false;
                    }
                }
            }
        }
        return true;
    }
  1. 大多数情况下,您并不需要这样做,因为WPF有字体回退系统,如问题中所描述的那样。要指定自己的回退字体,可以使用FontFamily类。例如,您想使用Roboto,当它没有阿拉伯字符时,您想使用Janna LT Bold:
代码语言:javascript
复制
    myTextBlock.FontFamily = new FontFamily("Roboto, Janna LT Bold");

代码语言:javascript
复制
<TextBlock FontFamily="Roboto, Janna LT Bold">Hello, world</TextBlock>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72260401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档